1.纯虚函数和抽象类
纯虚函数:没有函数体的虚函数
class a
{
private:int a;
public:
virtual void print() =0;//纯虚函数
};
抽象类:包含纯虚函数的类叫抽象类
抽象类只能作为基类来派生新类使用,不能闯将抽象类的对象。
抽象类的指针和引用可以指向由抽象类派生而来的类的对象。
A a;//错,A是抽象类,不能闯将对象
A *pa;//ok,可以定义抽象类的指针和引用
pa=new A;//错误,A是抽象类,不能创建对象。
在抽象类的成员函数可以调用纯虚函数,但是在构造函数或者析构函数内部不能调用纯虚函数。
成员函数调用虚函数是多态,构造函数和析构函数调用虚函数不是多态。
如果一个类从抽象类派生而来,那么当且仅当它实现了基类中所有纯虚函数,它才能成为非抽象类。
class A
{
public:
virtual void f()=0;//纯虚函数
void g(){this->f();}//ok
A(){//f();//错误}
};
class B
{
public:
void f(){coutK<<"b:f()"<<endl;}
};
int main()
{
B b;
b.g();
return 0;
}
//输出:b::f()