"virtual"我既爱你,又恨你!

csy_2002 2005-11-12 10:35:53
为什么要在~CBase()前面加virtual以后,才能调用 ~CChild()呢?
谁能帮我解释详细一点呢?
非常的感谢!!
class CBase
{
public:
CBase()
{
cout<<"CBase!"<<endl;
}
virtual ~CBase()///////////
{
cout<<"De CBase!"<<endl;
}
};

class CChild:public CBase
{

public:
CChild()
{
cout<<"CChild!"<<endl;
}
~CChild()/////////////////////////
{
cout<<"De CChild!"<<endl;
}
};
void main()
{
CBase *p;
p=new CChild;
delete p;
}
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
toumao 2005-11-13
  • 打赏
  • 举报
回复
工作中当然最好别这样写,
但是在函数调用的时候,这样做可以利用多态性来节约函数的。

比如:
void Function(CBase *p)
{
p->成员函数();
}

CChild *q = new Child();
Function(q);
ggw 2005-11-13
  • 打赏
  • 举报
回复
基类指针可以指向派生类,这是多态性的关键。
lengfeng281 2005-11-13
  • 打赏
  • 举报
回复
virtual 有个特性就是运行时确定
你编译的时候并不知道该调用哪个解析函数
只有到运行是遇到delete时它会去判断到底用哪个解析函数

c++语言标准关于这个问题的阐述非常清楚:当通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。这意味着编译器生成的代码将会做任何它喜欢的事:重新格式化你的硬盘,给你的老板发电子邮件,把你的程序源代码传真给你的对手,无论什么事都可能发生。(实际运行时经常发生的是,派生类的析构函数永远不会被调用。

这是《Effective c++》里的一段话
bombwang 2005-11-12
  • 打赏
  • 举报
回复
学习
Snow_Ice11111 2005-11-12
  • 打赏
  • 举报
回复
如果从学习研究的角度把代码写成你这样的话,那楼上windcsn(向所有的朋友学习!) 的正解。
工作中的话最好别这样写。
Snow_Ice11111 2005-11-12
  • 打赏
  • 举报
回复
CBase *p;
p=new CChild; //p到底是什么类型的指针,没见过这么定义的
----------------------------------------------------
你的代码我看了很不解,你说的地方virtual删去完全不影响程序。上面两行也应改成:
CBase *p;
p=new CBase;

或:
CChild *p;
p=new CChild;

后来我用上面改过的代码运行确实无误。
windcsn 2005-11-12
  • 打赏
  • 举报
回复
这是虚函数的特性,因为有虚表的存在。因为你使用CBASE类型的指针,你将这个指针POINT向一个CCHILD对象,没有问题,因为是BASE 类,所以按照类型转换是隐士的,但如果你在两个类中都有方法是,如果一般情况按照指针的类型来调用,而使用VIRTUAL是告诉计算机这个必须特殊处理,应该检查指针POINT的哪个对象的该函数,因此就出现你说的这种情况了。
没有什么奇怪,看一下C++的虚表部分。
内容概要:本文围绕“基于改进秃鹰算法的微电网群经济优化调度”展开研究,利用Matlab代码实现优化算法的仿真与复现。研究重点在于通过改进的秃鹰搜索算法(Bald Eagle Search Algorithm, BESA)解决微电网群在运行过程中的经济调度问题,提升算法的收敛速度与全局寻优能力,以实现对分布式能源、储能系统及负荷的高效协调管理。文中详细阐述了微电网群的系统架构、数学建模过程、目标函数设计(如运行成本最小化、碳排放降低等),并结合智能优化算法进行求解,验证了改进算法相较于传统方法在调度精度和效率方面的优越性。同时,研究还探讨了算法在多场景下的适应性,为微电网群的智能化、低碳化运行提供了技术支持与实践参考。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能优化算法相关工作的工程技术人员。; 使用场景及目标:① 学习并掌握改进秃鹰算法在复杂优化问题中的应用方法;② 实现微电网群经济调度模型的构建与求解;③ 对比不同智能算法在电力系统优化中的性能表现;④ 为科研论文复现、课题研究或工程项目提供算法支持与代码参考。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块分析,重点关注算法改进策略与调度模型的耦合实现方式,同时可尝试在不同参数设置或场景条件下进行仿真实验,以加深对算法性能与调度效果的理解。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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