C++关于继承和派生的一个例题程序没看懂,求解答,谢谢

#include<iostream.h>classbase{intn;public:base(inta){cout<<"constructingbaseclass"<<e... #include <iostream.h>
class base
{
int n;
public:
base(int a)
{
cout<<"constructing base class"<<endl;
n=a;
cout<<"n="<<n<<endl;
}
~base(){cout<<"destructing base class"<<endl;}
};
class subs :public base
{
base bobj;
int m;
public:
subs(int a,int b,int c):base(a),bobj(c)
{
cout<<"constructing base class"<<endl;
m=b;
cout<<"m="<<m<<endl;
}
~subs(){cout<<"destructing sub class"<<endl;}
};
void main()
{
subs(1,2,3);
}
其中subs(int a,int b,int c):base(a),bobj(c)一行里:base(a),bobj(c)为何不能放在函数体中定义?
展开
 我来答
White_MouseYBZ
2014-08-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6688万
展开全部
其实这就是一种语法规定,规定可以这么写。这是对派生类进行初始化时需要对基类设置初值的情况。
tanyiii
2014-08-03
知道答主
回答量:23
采纳率:0%
帮助的人:13.9万
展开全部
表示继承的意思
类subs是base的派生类,而且又有一个base类型的数据成员bobj;
subs类的构造函数先调用基类的构造函数,base(a)进行初始化后,再调用数据成员bobj初始化

完成之后才调用本身subs::subs构造函数函数体内语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZeRur
2014-08-03 · TA获得超过378个赞
知道小有建树答主
回答量:243
采纳率:100%
帮助的人:230万
展开全部
subs(int a,int b,int c):base(a),
{
bobj(c)
cout<<"constructing base class"<<endl;
m=b;
cout<<"m="<<m<<endl;
}
首先说这么写是可以的 ;原因在于 你的派生类派生出了两个变量 一个是base类的对象 一个是m 而还剩下一个变量应该是基类的对象也就是n 但是你的派生类却无法访问基类私有对象 如果可以访问就违背OOP的私有机制了 你可以考虑一下如果可以访问那想访问基类的私有对象直接派生一个类就完了那就乱套了 所以派生类无权访问基类私有但是派生类又要初始化对象 所以就要 调用基类的构造函数 base(a), 这句就是调用了基类的构造函数 你的派生类应该一共有3个变量 两个可以在函数体内定义 一个必须调用基类构造 也就是必须写在上面 但是里面两个写在上面也是可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zzj1234x
2014-08-03 · TA获得超过906个赞
知道小有建树答主
回答量:409
采纳率:0%
帮助的人:292万
展开全部
可以这么写:

class subs : public base {
//...

public:

subs(int a, int b, int c) : base(a) {
bobj = c;

}

}

上面的constructor和如下code一样作用

subs(int a, int b, int c) : base(a) bobj(c) 叫做 initialisation list

另外,base(a) 只能放进initialisation list 里面。
追问
本人菜鸟还在自学阶段,幼稚问题还请海涵,敢问initialisation list是内联函数的意思吗?他有什么作用?感激不尽~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式