请教一个问题,有关虚析构函数的!

papaofdoudou
新星创作者: 人工智能技术领域
领域专家: 嵌入式与硬件开发技术领域
2008-11-14 10:15:27
请问各位朋友,如果基类的析构函数是虚的,那么子类的析构函数一定是虚的吗?即使没有加virtual??
看个例子:
#include <iostream>

using namespace std;
//#include <string.h>

class base;

base *pb;

class base
{
private:
char *data;
public:
base(const char*p)
{

data=new char[strlen(p)+1];
strcpy(data,p);
pb=this;
}

virtual void display() //base类的析构函数是虚的,是否从此有此类派生的类析构函数都是虚的?
{
cout<<"base"<<endl;
cout<<data<<endl;
}

virtual ~base()
{
delete []data;
cout<<"base destructed"<<endl;
}




};


class derived:public base
{
public:
derived(const char *p):base(p)
{
}
void display()
{
cout<<"derived"<<endl;
base::display();
}

virtual ~derived() //再次的virtual 是否必要?
{
cout<<"derived destructed"<<endl;
}

};

class dder:public derived
{
public:
dder(const char *p):derived(p)
{
// cout<<"dder"<<endl;
}

virtual ~dder() //同理,再此的 virtual 可否省略??
{
cout<<"dder constructed"<<endl;
}
};
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-11-14
  • 打赏
  • 举报
回复


请问各位朋友,如果我在一个基类中定义了一个虚析构函数,那么在定义基类的派生类的时候,派生类的析构函数会受到基类定义的析构函数影响吗?
会,只要有个函数是虚函数,那么其派生的子类,子类的子类,里面的那个函数都是虚函数,即使你不加关键之virtual!

基类的析构函数是虚的,是否派生类的一定是虚的?

是!

如果是的话,基类和派生类的名字不同,析构函数名也不同,那么派生类的怎么会是虚的呢?

这个就是这么个机制!他会顺延上找!


papaofdoudou 2008-11-14
  • 打赏
  • 举报
回复
呵呵,谢谢你,请允许我叫一个真儿, 需函数的定义是要求子类和父类的函数形式完全相同,这其中包括函数名字,参数列表,参数排列顺序等都必须相同.
但是我们看到上面的例子父类和子类的名字显然不同,当然他们的参数列表相同(因为都没有),为什么?
lucky_06 2008-11-14
  • 打赏
  • 举报
回复
virtual ~dder() //同理,再此的 virtual 可否省略??

可以省略
lucky_06 2008-11-14
  • 打赏
  • 举报
回复
virtual void display() //base类的析构函数是虚的,是否从此有此类派生的类析构函数都是虚的?






virtual ~derived() //再次的virtual 是否必要?

没有

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧