纯虚函数和抽象类

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;
}
原文地址:https://www.cnblogs.com/lasnitch/p/12764241.html