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)为何不能放在函数体中定义? 展开
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)为何不能放在函数体中定义? 展开
4个回答
展开全部
表示继承的意思
类subs是base的派生类,而且又有一个base类型的数据成员bobj;
subs类的构造函数先调用基类的构造函数,base(a)进行初始化后,再调用数据成员bobj初始化
完成之后才调用本身subs::subs构造函数函数体内语句
类subs是base的派生类,而且又有一个base类型的数据成员bobj;
subs类的构造函数先调用基类的构造函数,base(a)进行初始化后,再调用数据成员bobj初始化
完成之后才调用本身subs::subs构造函数函数体内语句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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个变量 两个可以在函数体内定义 一个必须调用基类构造 也就是必须写在上面 但是里面两个写在上面也是可以的
{
bobj(c)
cout<<"constructing base class"<<endl;
m=b;
cout<<"m="<<m<<endl;
}
首先说这么写是可以的 ;原因在于 你的派生类派生出了两个变量 一个是base类的对象 一个是m 而还剩下一个变量应该是基类的对象也就是n 但是你的派生类却无法访问基类私有对象 如果可以访问就违背OOP的私有机制了 你可以考虑一下如果可以访问那想访问基类的私有对象直接派生一个类就完了那就乱套了 所以派生类无权访问基类私有但是派生类又要初始化对象 所以就要 调用基类的构造函数 base(a), 这句就是调用了基类的构造函数 你的派生类应该一共有3个变量 两个可以在函数体内定义 一个必须调用基类构造 也就是必须写在上面 但是里面两个写在上面也是可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以这么写:
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 里面。
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是内联函数的意思吗?他有什么作用?感激不尽~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询