C++类的继承的成员初始化问题: 5

#include<iostream>usingnamespacestd;classA{private:intn_point;public:inti_point;A(int... #include <iostream>
using namespace std;

class A
{
private:
int n_point;
public:
int i_point;
A(int n):n_point(n),i_point(20)
{
cout<<"A的构造函数"<<endl;
}
void pr()
{
cout<<n_point<<'\t'<<i_point<<'\t';
}
};

class B:public A
{
int a_point;
public:
B(int n,int a):A(n),a_point(a),i_point(15)
{
cout<<"B类的构造函数"<<endl;
// i_point=15;
}
void pr()
{
A::pr();
cout<<a_point<<endl;
}
};

int main()
{
A a(10);
B b(5,25);
a.pr();
cout<<endl;
b.pr();
}
在类B中,继承了A类,那A类中的public成员i_point为什么不能在B类的构造函数后面引用参数列表来赋值呢?而必须在类B的构造函数的函数体中进行初始化?
展开
 我来答
LYB661
推荐于2017-05-20 · TA获得超过314个赞
知道小有建树答主
回答量:232
采纳率:0%
帮助的人:75.5万
展开全部
根据C++类的规则:
派生类的构造函数只能初始化自己的成员,而不能初始化基类的成员。
当然,有时派生类从基类继承了成员,它也可以初始化其从基类继承的成员。
这时要用构造函数初始化列表中包含基类名及其从基类继承的成员:即上例中的A(n)。
至于你所说的赋值情况,只是在派生类中访问基类的公有成员的特例,不属于成员初始化工作。
i_point是类A中public成员,所以能对其进行赋值操作,这并不是派生类构造函数工作的一部分。
另外,类的数据成员,一般应为私有。所以你的程序改为如下更好些:
#include <iostream>
using namespace std;

class A
{
private:
int n_point;
int i_point;
public:

A(int n,int i):n_point(n),i_point(i)
{
cout<<"A的构造函数"<<endl;
}
void pr()
{
cout<<n_point<<'\t'<<i_point<<'\t';
}
};

class B:public A
{
int a_point;
public:
B(int n,int i,int a):A(n,i),a_point(a)
{
cout<<"B类的构造函数"<<endl;
}
void pr()
{
A::pr();
cout<<a_point<<endl;
}
};

int main()
{
A a(10,20);
B b(5,15,25);
a.pr();
cout<<endl;
b.pr();
}
小醜_88
2012-05-05 · 超过15用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:39万
展开全部
要把基类看成一个成体,构造B对象时要调用A的构造函数,不能单独对A中的成员初始化,
在函数体中是对其赋值,对象已经构造好!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jdergon
2012-04-28 · TA获得超过225个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:142万
展开全部
派生类的构造函数只能初始化自己的成员,而不能初始化基类的成员。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-26
展开全部
可以这样
class B:public A
{
int a_point;
public:
B(int n,int a):A(n),a_point(a)
{
i_point = 15;
cout<<"B类的构造函数"<<endl;
// i_point=15;
}
void pr()
{
A::pr();
cout<<a_point<<endl;
}
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式