纯虚函数:
形式:virtual 类型 函数名(参数列表) = 0;
一个具有纯虚函数的基类被称为抽象类。
抽象类不能用于实例化;但是可以声明抽象类的指针。
多继承的二义性。
#include <iostream>
using namespace std;
class B{
public:
int b;
protected:
private:
};
class B1:public B{
public:
int b1;
protected:
private:
};
class B2:public B{
public:
int b2;
protected:
private:
};
class C:public B1, public B2{
public:
int c;
protected:
private:
};
int main()
{
C c;
c.b1 = 9;
c.b2 = 10;
//c.b = 0; 并不确定是哪个基类的b,存在二义性
cout << "Hello world!" << endl;
return 0;
}
备注:在实际的开发中几乎不用多继承来解决问题。解决方案就是使用虚继承。
纯虚函数和抽象类:
纯虚函数是一个在基类中说明的虚函数,在基类中没有定义。要求任何派生类都定义自己的版本。
纯虚函数为各个派生类提供了一个界面。
纯虚函数说明形式:
virtual 类型 函数名(参数列表) = 0;
一个具有纯虚函数的基类称为抽象类。
抽象类不能定义对象。
示例程序:
#include <iostream>
using namespace std;
class Figure{ //函数纯虚函数的类被称为抽象类
public:
//提供一个统一的界面(接口),让子类使用,子类必须实现
virtual double getArea() = 0; //抽虚函数
protected:
private:
};
class Circle:public Figure{
public:
Circle(double r){
this->m_r = r;
}
virtual double getArea(){
cout<<"圆的面积:"<<3.14*m_r*m_r<<endl;
return 3.14*m_r*m_r;
}
protected:
private:
double m_r;
};
int main()
{
//Figure f; 抽象类不能被实例化
Figure *base = NULL;
Circle c(10);
base = &c;
base->getArea();
return 0;
}