c++ 虚函数以及抽象类

来源:互联网 发布:阿里外包员工出路 知乎 编辑:程序博客网 时间:2024/06/05 23:44

虚函数:

引入目的:

多态性,动态绑定,c++的多态性通过虚函数来实现的。

抽象类:

引入目的:

1、方便使用多态特性,需要在基类中定义虚函数。

2、有些情况下,不允许基类本身生成对象,e.g. 动物可以派生出狗、猫等子类,这些子类可以生成相应对象,但是动物本身不应生成对象,明显不合理。

c++ 中抽象类的实现是通过定义纯虚函数来实现的,在类中定义了纯虚函数的类被称为抽象类,该类不可以被实例化。

定义纯虚函数:

virtual returnType functionName(parameter list)=0

纯虚函数必须在基类中声明,在基类中未被定义,要求派生类都要定义自己的实现方法。

虚函数:

该函数在基类中被声明为virtual,但是可以有基类进行定义,派生类中可以重新定义,可以实现动态重载。

e.g.抽象类代码:

#include <iostream>using namespace std;class A{private:int data;public :A():data(0){}virtual int a()=0;  //纯虚函数,A为抽象类virtual int getData(){return data;}void setData(int a){data=a;}};class B:public A{int d;public:B():d(1){}int a(){return d+1;}int getData(){return d;}};int main(){//A a;     抽象类不可被实例化//cout<<a.getData()<<endl;B b;cout<<b.getData()<<endl;cout<<b.a()<<endl;return 0;}


虚函数举例:

#include <iostream>using namespace std;class A{private:int data;public :A():data(0){}//virtual int a()=0;virtual int getData(){return data;}void setData(int a){data=a;}};class B:public A{int d;public:B():d(1){}int a(){return d+1;}int getData(){return d;}};int main(){A a;cout<<a.getData()<<endl;B b;cout<<b.getData()<<endl;cout<<b.a()<<endl;return 0;}