c – 面向对象编程,继承复制构造函数
发布时间:2020-12-16 09:25:50 所属栏目:百科 来源:网络整理
导读:假设我有一个基类“人”.我公开地从基类“人”继承了一个班级“学生”.我还没有为base和派生类编写复制构造函数.现在假设我在主程序中写道 main(){student sobj1("name","computer science");student sobj2=sobj1;} 现在在第二行中,将调用学生的默认编译器生
假设我有一个基类“人”.我公开地从基类“人”继承了一个班级“学生”.我还没有为base和派生类编写复制构造函数.现在假设我在主程序中写道
main() { student sobj1("name","computer science"); student sobj2=sobj1; } 现在在第二行中,将调用学生的默认编译器生成的复制构造函数但在执行之前将调用基类的默认复制构造函数,它创建一个匿名对象并初始化它然后控制返回到复制构造函数学生初始化学生的对象部分. 这是我们不编写复制构造函数的情况的演示 student sobj2=sobj1; 会发生什么,这行调用学生的复制构造函数,但是在这种情况下不会调用基类的复制构造函数(基类的默认构造函数将被调用)我的问题是为什么? 解决方法
我相信规则如下:
>基类的构造函数总是应该在派生类的构造函数之前调用. 所以,你去吧.除非你调用基类的复制构造函数,否则将使用默认的BUT编译器足够聪明,可以在它自己生成的复制构造函数中实际调用它. 以防你不知道如何调用它,例如 Student(Student const & p): Person(p) { } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |