当前位置: 首页 > news >正文

精品一卡2卡三卡4卡分类trinseo公司

精品一卡2卡三卡4卡分类,trinseo公司,舞阳专业做网站,自己的网站建设纯虚析构的问题 多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。 解决方式:将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性: 可以解决父类指针释放子类对象都需要有…

纯虚析构的问题

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。

解决方式:将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性:

  • 可以解决父类指针释放子类对象
  • 都需要有具体的函数实现

虚析构和纯虚析构区别:

  • 如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法:

virtual ~类名(){}

纯虚析构语法:

virtual ~类名() = 0;

类名::~类名(){}

示例:

class Animal {
public:Animal(){cout << "Animal 构造函数调用!" << endl;}virtual void Speak() = 0;//析构函数加上virtual关键字,变成虚析构函数//virtual ~Animal()//{//	cout << "Animal虚析构函数调用!" << endl;//}virtual ~Animal() = 0;
};Animal::~Animal()
{cout << "Animal 纯虚析构函数调用!" << endl;
}//和包含普通纯虚函数的类一样,包含了纯虚析构函数的类也是一个抽象类。不能够被实例化。class Cat : public Animal {
public:Cat(string name){cout << "Cat构造函数调用!" << endl;m_Name = new string(name);}virtual void Speak(){cout << *m_Name <<  "小猫在说话!" << endl;}~Cat(){cout << "Cat析构函数调用!" << endl;if (this->m_Name != NULL) {delete m_Name;m_Name = NULL;}}public:string *m_Name;
};void test01()
{Animal *animal = new Cat("Tom");animal->Speak();//通过父类指针去释放,会导致子类对象可能清理不干净,造成内存泄漏//怎么解决?给基类增加一个虚析构函数//虚析构函数就是用来解决通过父类指针释放子类对象delete animal;
}int main() {test01();system("pause");return 0;
}

注意:即使是纯虚析构也需要有具体的实现。因为包含纯虚函数的类为抽象类,被继承后,在派生类析构函数被调用时抽象类析构函数也将被调用,因此必须有实现。唯一麻烦就是必须在类的定义之外(cpp文件)实现它。

总结:

​ 1. 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象

​ 2. 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构

​ 3. 拥有纯虚析构函数的类也属于抽象类



纯虚函数的实现案例:纯虚析构函数必须有实现

纯虚函数可以有实现:唯一麻烦就是必须在类的定义之外(cpp文件)实现它。
申明一个函数为纯虚并不意味着它没有实现,它意味着:

  • 当前类是抽象类 ;
  • 任何从此类派生的实体类必须将此函数申明为一个“普通”的虚函数(也就是说,
    不能带“= 0”)。

1、纯虚函数例子:

声明一个pure virtual 函数的目的是为了让 derived classes 只继承函数接口,派生类必须提供实现
可以为pure virtual函数提供实现,但使用时需要指明所属类,如:

//.h
class A{
public:virtual void func1() = 0;
};
class B : public A{
public:virtual void func1(){A::func1();};
};//.cpp
void A::func1(){..........}B b;
b.A::func1(); // 与b.func1()结果相同,相当于提供了缺省实现,但派生类需要主动指定。



2、纯虚析构函数必须有实现:

因为包含纯虚函数的类为抽象类,被继承后,在派生类析构函数被调用时抽象类析构函数也将被调用,因此必须有实现

class A{
public:virtual ~A() = 0;
};//.cpp
A::~A(){...}

总结:
1、纯虚函数可以有实现,但必须在类的定义之外(cpp文件)实现。
2、纯虚析构函数必须有实现。





参考链接:
纯虚函数的实现案例:纯虚析构函数必须有实现

http://www.hkea.cn/news/583950/

相关文章:

  • 网站备案 法人身份证cba最新消息
  • 做公司网站需要什么手续厦门seo网站优化
  • 合肥本地网站网站关键词公司
  • 武汉电商网站建设seopc流量排行榜企业
  • 如何给给公司建立网站seo商学院
  • 让建站公司做网站需要什么最新腾讯新闻
  • 网站开发的意义搜索关键词排名优化
  • 如何建一个论坛网站怎么做营销推广
  • 元凤建盏简介青岛seo
  • 营销型网站套餐cps游戏推广平台
  • 哪些网站做ip向小说网络营销公司经营范围
  • 蜜芽免费网站域名关键词网站排名查询
  • 网站备案要到哪里下载关键词在线挖掘网站
  • 跨境电商开发seo的优化策略有哪些
  • 做网站的费用 优帮云百度广告代运营
  • wordpress儿童卡通主题兰州网站seo服务
  • 8网站建设做网站sem优化师是什么意思
  • 设计师个人网站怎么做百度优化培训
  • 广东海外建设监理有限公司官方网站2345网址导航是病毒吗
  • 深圳网站制作培训宁波网络营销公司
  • 网站建设方案书 模板长清区seo网络优化软件
  • 简述网站的推广策略产品设计
  • 商贸有限公司网站建设此网站服务器不在国内维护
  • 常州个人做网站制作小程序的软件
  • 郑州做网站公司dz论坛如何seo
  • 十堰商城网站建设网络营销seo优化
  • 小欢喜林磊儿什么网站做家教福州seo推广外包
  • 许昌网站开发博客营销
  • 做网站用jquery爱站网关键词挖掘
  • wordpress手动裁剪seo营销推广服务公司