C++多态性——(4)纯虚函数与抽象类

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
我们不能选择命运,但我们可以改变命运!

一起加油!

目录

一、纯虚函数:

二、抽象类:


一、纯虚函数:

在之前的例子中,对于 Shape类中的虚函数GetArea(),无法给出具体的函数实现,所以固定返回0在很多情况下,存在基类中虚函数无法给出具体实现代码的情况,如写一个空的函数体。这就引出了纯虚函数的概念。

纯虚函数在声明时要在函数原型的后面赋0,其声明格式如下:

virtual <返回值类型><函数名>(<参数表>)= 0;

函数声明为纯虚函数后,就不用给出具体的定义

二、抽象类:

抽象类是一种特殊的类,自身无法实例化,即自身无法定义对象,主要是作为基类派生出新的类,并且使得所有派生出来的类都保留统一的接口操作。

如果一个类中至少包含一个纯虚函数,这个类就被称为抽象类。

抽象类特点如下:

  • (1)抽象类至少包含一个没有给出具体实现的纯虚函数,抽象类无法实例化,不能定义对象
  • (2)抽象类不能作为形参类型、函数返回类型或转换类型,但是可以定义抽象类指针和引用指向公有派生对象,实现动态多态性。
  • (3)在抽象类中也可以定义普通成员函数和虚函数,仍然可以通过派生类对象来调用这些不是纯虚函数的函数。
  • (4)不允许从非抽象类(即不包含纯虚函数的类)派生出抽象类

例:纯虚函抽象类应用示例。

cpp 复制代码
#include<iostream>
using namespace std;
class Space
{
	private:
		int x;
		int y;
	public:
		Space(int px,int py):x(px),y(py)
		{
			cout<<"Space construct called"<<endl;	
		}	
		virtual double GetArea()=0; 
};
class Rectangle:public Space
{
	private:
		double w;
		double h;
	public:
		Rectangle(int px,int py,double pw,double ph):Space(px,py),w(pw),h(ph)
		{
			cout<<"Rectangle construct called"<<endl;
		}
		double GetArea()
		{
			return w*h;
		}
};
class Circle:public Space
{ 
	private:
		int r;
	public:
		Circle(int px,int py,int pr):Space(px,py),r(pr)
		{
			cout<<"Circle construct called"<<endl;
		}	
		double GetArea()
		{
			return 3.14*r*r;	
		}
};
int main(){
	Rectangle r1(30,40,4,8);
	Circle cr(30,40,4);
	Space *p=&r1;
	cout<<r1.GetArea()<<endl;
	cout<<p->GetArea()<<endl;
	p=&cr;
	cout<<cr.GetArea()<<endl;
	cout<<p->GetArea()<<endl;
	return 0;
} 

以上就是我对C++多态性------(4)纯虚函数与抽象类的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++多态性的理解,请持续关注我哦!!!

相关推荐
ELI_He9996 分钟前
PHP中替换某个包或某个类
开发语言·php
小林熬夜学编程10 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
m0_7482361113 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
倔强的石头10621 分钟前
【C++指南】类和对象(九):内部类
开发语言·c++
Watermelo61726 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
机器视觉知识推荐、就业指导2 小时前
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
c++
半盏茶香2 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Evand J3 小时前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
LucianaiB3 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python