急求!!此C++程序运行结果和原因

#include<iostream>usingnamespacestd;classA{public:A(){cout<<"A::A()called.\n";}virtua... #include <iostream>
using namespace std;
class A
{public:
A(){cout<<"A::A() called.\n";}
virtual ~A(){cout<<"A::~A() called.\n";}
};
class B: public A
{public:
B(int i)
{ cout<<"B::B() called.\n";
buf=new char[i];
}
virtual ~B()
{ delete []buf;
cout<<"B::~B() called.\n";
}
private:
char *buf;
};
int main()
{ A *a=new B(15);
delete a;
return 0;
}
展开
 我来答
成都IO
2015-01-12 · TA获得超过117个赞
知道小有建树答主
回答量:153
采纳率:100%
帮助的人:130万
展开全部
A::A() called.// 实例化一个B对象,B对象由A继承而来,先执行A的构造方法,输出。
B::B() called.// 父类构造函数执行完了,执行B的构造方法,输出。
B::~B() called.// delete a 释放a对象,先调用本身析构函数,
A::~A() called.// 再调用父类析构函数,释放掉整个空间

简单的来说就是,对象在初始化的时候依次调用父类构造函数,在调用自身构造函数,释放的时候恰好相反。

中智咨询
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。... 点击进入详情页
本回答由中智咨询提供
kaixingui2012
2015-01-12 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6530万
展开全部
运行结果:
A::A() called.
B::B() called.
B::~B() called.
A::~A() called.

A *a=new B(15); a是指针,不会调用构造函数, 因为实例化一个B类对象,所以会调用B类的构造函数。而B又是继承自A类,所以,调用B构造前会先调用基类构造函数。 析构时先析构子类,再析构基类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式