欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > C++ 60 之 虚析构和纯虚析构

C++ 60 之 虚析构和纯虚析构

2024/11/30 9:49:18 来源:https://blog.csdn.net/LSG_Down/article/details/139781070  浏览:    关键词:C++ 60 之 虚析构和纯虚析构
#include <iostream>
#include <string>
#include <cstring>
using namespace std;class Animal13{
public:Animal13(){cout << "Animal的默认构造函数" << endl;}virtual void speak(){cout << "动物叫" << endl;}// 虚析构// 如果子类中有指向堆空间的属性,需要给父类的析构函数设置为虚析构,子类中的析构函数才能调用// virtual ~Animal13(){//     cout << "Animal的析构函数" << endl;// }// 纯虚析构:类内声明,类外设置实现// 类中如果存在纯虚析构函数,这个类也属于抽象类,无法实例化对象    虚析构和纯虚析构的区别:可否实例化virtual ~Animal13(); // virtual ~Animal13() = 0 中 = 0 可以省略
};
Animal13 :: ~Animal13(){cout << "Animal的析构函数" << endl;
}class Cat : public Animal13{
public:char* m_name;Cat(const char* name){cout << "Cat的构造函数" << endl;this->m_name = new char[strlen(name) + 1];strcpy(this->m_name, name);}virtual void speak(){cout << "喵喵" << endl;}~Cat(){if(this->m_name){delete [] this->m_name;this->m_name = NULL;}}
};int main()
{Animal13* animal = new Cat("咪咪");animal->speak();delete animal;animal = NULL;return 0;
}

虚析构函数作用

虚析构函数是为了解决基类指针指向派生类对象,并用基类的指针删除派生类对象。

纯虚析构函数

纯虚析构函数在c++中是合法的,但是在使用的时候有一个额外的限制:必须为纯虚析构函数提供一个函数体。

纯虚析构函数和非纯析构函数之间唯一的不同之处在于纯虚析构函数使得基类是抽象类,不能创建基类的对象。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com