这样的函数是否是虚函数????

hufanxp 2004-12-14 09:34:06
class base{
virtual ~base();//虚函数
}

class Derived : public base
{
~Derived(); // 是否是虚函数?
}
...全文
173 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
方健的专栏 2004-12-14
  • 打赏
  • 举报
回复
基类的析构函数声明为虚函数是为了调用其派生类的析构函数,派生类的析构函数不是虚函数
xingxinghao 2004-12-14
  • 打赏
  • 举报
回复
楼上的朋友调试过了 ,结果证明了是。
在调用派生类的析构函数时,是先调用派生类的析构函数,再调用基类的析构函数。
根据楼上朋友写的:int main()
{
derived* p = new C;
delete p;
return 0;
}

VC71下面输出:
C::~C
derived::~derived
base::~base

HP_UNIXxiami下面也是
G++也是,如果把derived的:public base注释掉,则只输出
derived::~derived了

可知,如果不是虚函数的话,他的输出结果是为:derived::~derived
base::~base
一路奔跑 2004-12-14
  • 打赏
  • 举报
回复
是di
dudu妈 2004-12-14
  • 打赏
  • 举报
回复
class base{
virtual ~base();//虚函数
}

class Derived : public base
{
~Derived(); // 不是虚函数,是析构函数
}
不是虚函数,是析构函数
minanqiang 2004-12-14
  • 打赏
  • 举报
回复
声明为virtual的虚函数。
析构函数要是虚函数的话前面也会加上virual


class base{
virtual ~base();//虚函数
}

class Derived : public base
{
~Derived(); // 是否是虚函数? 不是虚函数。
}
Kendiv 2004-12-14
  • 打赏
  • 举报
回复
是虚函数,楼上的朋友已经说得很清楚了。
liem 2004-12-14
  • 打赏
  • 举报
回复
从行为上看是虚函数吧,如:
class base{
public:
virtual ~base(){cout<<"base "<<endl;}
};

class Derived : public base
{
public:
~Derived(){cout<<"derived"<<endl};
};

class Last:public Derived
{
public:
~Last(){cout<<"Last"<<endl;}
};
void f(Derived *p)
{
delete p;
}
void main()
{
Last *d=new Last;
f(d);

}
运行后输出:
Last
Derived
base
======
如果~Derived 不是虚的,那么将不会有"Last"的输出,现有输出,这表明虚函数起作用了。

lattice 2004-12-14
  • 打赏
  • 举报
回复
是的,些个例子测试一下就知道了.
class base
{
public:
virtual ~base(){cout<<"base::~base"<<endl;}
};

class derived//:public base
{
public:
~derived(){cout<<"derived::~derived"<<endl;}
};
class C:public derived
{
public:
~C(){cout<<"C::~C"<<endl;}
};

int main()
{
derived* p = new C;
delete p;
return 0;
}

VC71下面输出:
C::~C
derived::~derived
base::~base

HP_UNIXxiami下面也是
G++也是,如果把derived的:public base注释掉,则只输出
derived::~derived了
goodluckyxl 2004-12-14
  • 打赏
  • 举报
回复
ft
没在意是析构函数
自动继承为虚
不好意思搞错了
hchinside 2004-12-14
  • 打赏
  • 举报
回复
绝对是
lu1172101275 2004-12-14
  • 打赏
  • 举报
回复
that is the way ! 这是继承类的虚析构函数特定写法。
  • 打赏
  • 举报
回复
hufanxp 2004-12-14
  • 打赏
  • 举报
回复
哦,3ks!
goodluckyxl 2004-12-14
  • 打赏
  • 举报
回复
显然没有声明为virtual

要显式声明
langzi8818 2004-12-14
  • 打赏
  • 举报
回复
en
licki 2004-12-14
  • 打赏
  • 举报
回复
不是
snow810211 2004-12-14
  • 打赏
  • 举报
回复
刚看过书,基类声明了就可以了,子类继承过来了,所以不用声明,也是virtual
updd 2004-12-14
  • 打赏
  • 举报
回复
其实是不是都没有影响。
如果是delete指向派生类的指针,那基类析构函数是虚的了,就会按派生类-基类的顺序析构。
如果是其他的,也跟派生类是不是虚构没有关系。

所以就使用上来说,派生类析构申明为虚与否都没有关系,只要把基类析构函数申明为虚就可以了。

不知道我的理解有没有不周到的地方啊

64,637

社区成员

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

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