纯虚函数和抽象类
1、什么是纯虚函数、什么是抽象类?
没有函数体的虚函数的纯虚函数。包含纯虚函数的类叫抽象类。
//举栗子:
class A {
private:
int a;
public:
virtual void Print( ) = 0 ;//纯虚函数
void fun() { cout << "fun"; }
};
2、抽象类的特点
- 抽象类只能作为基类来派生新类使用,不能创建抽象类的对象
- 抽象类的指针和引用可以指向由抽象类派生出来的类的对象
- 在抽象类的普通成员函数内可以调用纯虚函数,但是在构造函数或析构函数内部不能调用纯虚函数。(多态可以调用,不是多态就不可以。这也是纯虚函数的作用所在。即可以在多态语句中调用。相当于定义了接口。)
- 如果一个类从抽象类派生而来,那么当且仅当它实现了基类中的所有纯虚函数,它才能成为非抽象类。否则,它仍是抽象类。
3、解释上述特点
class A {
public:
virtual void f() = 0; //纯虚函数
void g( ) { this->f( ) ; //ok 程序在这而不会发生错误,这句是多态,因为this一定指向的是一个实现了f()函数的非抽象类对象}
A( ){//f( ); //这句不是多态,而f()是纯虚,因此编译错误}
};
class B:public A{
public:
void f(){cout<<"B:f()"<<endl; }
};
int main(){
B b;
b.g();
return 0;
}