永发信息网

派生类的构造函数!!

答案:2  悬赏:50  手机版
解决时间 2021-04-07 10:09
  • 提问者网友:回忆在搜索
  • 2021-04-07 04:12
学c++不久.
我写了一个base类,其中有保护成员a,b,派生出derived类,有私有成员c.然后写了基类构造函数:
base::base(int x,int y)
{
a=x;b=y;
}
派生类构造函数:
derived::derived(int x,int y,int z):base(x,y),c(z)
{}
这样正常.如果把派生类构造函数中的c(z)去掉,在里面加一句c=z;运行起来也一样.那这两种写法有区别吗?一般应该怎么写?
另外这两个类在classview里是并列显示的,之前我以为派生类会显示成树啊..
最佳答案
  • 五星知识达人网友:神的生死簿
  • 2019-09-12 08:02
derived::derived(int x,int y,int z):base(x,y),c(z)
{}
这种叫做成员初始列方式。是在变量创建时初始化。
base::base(int x,int y)
{
a=x;b=y;
}
这种是在变量创建以后对变量赋值。

一般来说可以通用,但是当你的成员变量中出现常量成员时(即const成员)就必须用成员初始列来初始化了。

classview不把继承关系表示成树,不然多重继承咋弄。
全部回答
  • 1楼网友:忘川信使
  • 2020-07-24 10:46
楼主理解错了吧!!! y(int a,int b,int c):ai(a),bi(b),ci(c){}这样初始化基类成员是错的!!! 改为y(int a,int b,int c):x(a,b),ci(c){} 调用派生类的构造函数就先调用基类的构造函数,用基类的构造函数去初始化基类的成员。不能直接用派生类的构造函数初始化基类的成员!!!!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯