为了账号安全,请及时绑定邮箱和手机立即绑定

多重继承中的问题

多重继承中,士兵类(Soldier)继承人类(Person),步兵类(Infantry)又继承士兵类,有三个test函数

void test1(Person p)

{

p.play();

}

void test2(Person &p)

{

p.play();

}

void test3(Person *p)

{

p.play();

}

实例化一个步兵类对象Infantry infantry;

然后调用函数test1(infantry);test2(infantry);test3(&infantry);

结果是这样的:

Person()

Soldier()

Infantry();

person--play()

jack

~person()

person--play()

jack

person--play()

jack

问题来了,为什么只执行一次Person的析构函数

正在回答

2 回答

因为test1是直接以类对象作为实参,在执行时会产生一个临时对象,函数执行完后会自动销毁,所以你看到了~person();但test2和test3是以指针和引用作为函数实参,在执行时不会产生新对象,所以函数执行完不存在释放,相对于直接以对象作为实参的情况,这两种效率更高

0 回复 有任何疑惑可以回复我~

根据你的代码打印的结果,推测你使用的是栈上面创建的对象,所以对象的释放是在程序运行完成之后,如果想看到这个析构函数,要么使用new创建,然后delete释放,或者你再创建一个函数,在函数里面去执行main函数中的代码,在main函数里面调用这个函数,那么在这个函数退出时,你就会看到第二次person的析构函数

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之继承篇
  • 参与学习       75188    人
  • 解答问题       251    个

继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面

进入课程

多重继承中的问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号