C/C++教程

c++——抽象类的纯虚析构函数

本文主要是介绍c++——抽象类的纯虚析构函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一个示例:

class Parent
{
public:
	Parent() {}
	virtual ~Parent() = 0; 
};

class Child : public Parent
{
	//具体实现
};

int main()
{
	{
		Parent* p = new Child();
	}

	system("pause");
    return 0;
}

编译时会报如下错误:

LNK2019	无法解析的外部符号 "public: virtual __thiscall Parent::~Parent(void)" (??1Parent@@UAE@XZ),该符号在函数 "public: virtual __thiscall Child::~Child(void)" (??1Child@@UAE@XZ) 中被引用	vptr	E:\c++\study\纯虚析构函数\vptr\vptr\vptr.obj	1	

分析:

父类的析构函数定义为了纯虚的析构函数,析构函数的执行顺序为先析构子类,再析构父类。当析构父类的时候,找不到函数体,故编译失败。

解决:

class Parent
{
public:
	Parent() {}
	virtual ~Parent() = 0;  //可以这样定义,但是如果作为父类,需要单独定义函数体
};

Parent::~Parent()
{

}

对纯虚析构函数进行单独定义即可。

这篇关于c++——抽象类的纯虚析构函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!