归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
我们不能选择命运,但我们可以改变命运!
一起加油!
目录
? ? ? ? 在之前的例子中,对于 Shape类中的虚函数GetArea(),无法给出具体的函数实现,所以固定返回0在很多情况下,存在基类中虚函数无法给出具体实现代码的情况,如写一个空的函数体。这就引出了纯虚函数的概念。
纯虚函数在声明时要在函数原型的后面赋0,其声明格式如下:
virtual <返回值类型><函数名>(<参数表>)= 0;
函数声明为纯虚函数后,就不用给出具体的定义?
????????抽象类是一种特殊的类,自身无法实例化,即自身无法定义对象,主要是作为基类派生出新的类,并且使得所有派生出来的类都保留统一的接口操作。
????????如果一个类中至少包含一个纯虚函数,这个类就被称为抽象类。
抽象类特点如下:
#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++多态性的理解,请持续关注我哦!!!?