#include <iostream>
using namespace std;
class TestA //含有纯虚函数的类称为抽象类 抽象类不能创建对象
{
public:
virtual void f1() //虚函数
{
cout << "this is TestA f1()" << endl;
}
virtual void f2() = 0; //纯虚函数 为基类提供一个接口
};
class TestB : public TestA
{
public:
void f1()
{
cout << "this is TestB f1()" << endl;
}
void f2()
{
cout << "this is TestB f2()" << endl;
}
};
int main()
{
//TestA ta; //抽象类不能创建对象
TestA *pa; //是对象指针 不是指针对象 (对象指针只是一个指针 单纯定义一个指针不存在创建对象)
pa = new TestB;
pa->f1();
pa->f2(); //f2()在派生类中得到实例化 打印的是派生类的f2()
return 0;
}
人狠话不多,先附上一小段代码帮助理解。
总结:
1、纯虚函数没有函数体,只有函数声明,格式为在虚函数声明的结尾加上“=0”。
2、包含纯虚函数的类叫做抽象类,之所以说他抽象是因为它无法实例化(无法创建对象)。原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。
3、抽象类通常作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。
关于纯虚函数的几点说明:
1、抽象基类除了包含纯虚函数,还可以包含其他的成员函数(虚函数or普通函数)和成员变量。
2、只有类中的虚函数才可以被声明为纯虚函数,普通函数和顶层函数均不能声明为纯虚函数。例如:
//顶层函数不能被声明为纯虚函数
void fun() = 0;
class Test
{
public:
//普通成员函数不能被声明为纯虚函数
void show() = 0;
};