派生类构造函数调用基类构造函数

gxj714 2012-04-05 03:15:39

#include "StdAfx.h"
#include<iostream>
using namespace std;



class rootClass {
public: int rpub_data;
//rootClass():rpub_data(0),rpri_data(0),rpro_data(0){}
rootClass(int aa=2,int bb=2,int cc=2){
rpub_data=aa;
rpri_data=bb;
rpro_data=cc;
}
void show_r_data(){
cout<<"public data: "<<rpub_data<<endl;
cout<<"private data: "<<rpri_data<<endl;
cout<<"protected data: "<<rpro_data<<endl;
}
void set_r_data(int aa,int bb,int cc){
rpub_data=aa;
rpri_data=bb;
rpro_data=cc;
}
private:
int rpri_data;
protected:
int rpro_data;
};

//define the children class

class childrenClass:public rootClass{
public:
childrenClass(){}
childrenClass(int para1,int para2,int para3){
rootClass( para1, para2, para3);
}
void show_children_data(){
show_r_data();
}
void set_children_data(int aa,int bb,int cc){
set_r_data(aa,bb,cc);
}
};


void main()
{
childrenClass init;
cout<<"init's public data: "<<init.rpub_data<<endl;
cout<<"use rootclass's method to show all the data: ";
init.show_r_data();
cout<<"use init's own method to show all the data: ";
init.show_children_data();
childrenClass afterinit(1,2,3);
//afterinit.set_children_data(1,2,3);
afterinit.show_children_data();
}

为什么afterinit的输出还是2,2,2,而不是1,2,3?
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
siceblue 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C/C++ code

class childrenClass:public rootClass
{
public:
childrenClass(){}
// 这样才是初始化基类
childrenClass(int para1,int para2,int para3):rootClass( para1, para2, para3)
{

}
vo……
[/Quote]

++
gxj714 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C/C++ code

class childrenClass:public rootClass
{
public:
childrenClass(){}
// 这样才是初始化基类
childrenClass(int para1,int para2,int para3):rootClass( para1, para2, para3)
{

}
vo……
[/Quote]
呵呵,谢谢!麻烦看看我的回复,继续请教。
gxj714 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

childrenClass(int para1,int para2,int para3){
rootClass( para1, para2, para3);
}
你这里构造的是一个临时对象,而不是初始化基类部分。google"初始化列表"
[/Quote]
谢谢!

#include "StdAfx.h"
#include<iostream>
using namespace std;



class rootClass {
public: int rpub_data;
//rootClass():rpub_data(0),rpri_data(0),rpro_data(0){}
rootClass(int aa,int bb,int cc){
rpub_data=aa;
rpri_data=bb;
rpro_data=cc;
}
void show_r_data(){
cout<<"public data: "<<rpub_data<<endl;
cout<<"private data: "<<rpri_data<<endl;
cout<<"protected data: "<<rpro_data<<endl;
}
void set_r_data(int aa,int bb,int cc){
rpub_data=aa;
rpri_data=bb;
rpro_data=cc;
}
private:
int rpri_data;
protected:
int rpro_data;
};

//define the children class

class childrenClass:public rootClass{
public:

childrenClass(int para1,int para2,int para3){
rootClass( para1, para2, para3);
}
void show_children_data(){
show_r_data();
}
void set_children_data(int aa,int bb,int cc){
set_r_data(aa,bb,cc);
}
};


void main()
{
childrenClass init(1,2,3);
cout<<"init's public data: "<<init.rpub_data<<endl;
cout<<"use rootclass's method to show all the data: ";
init.show_r_data();
cout<<"use init's own method to show all the data: ";
init.show_children_data();

}

一开始我是这样的代码,结果编译提示rootclass没有合适的构造函数,这是为什么呢?
在网上看到一个文章说派生类构造函数调用的顺序问题,他这么说:http://blog.163.com/chen_dawn/blog/static/112506320116741519305
我想我这个代码的错误是不是验证了他的话?
cbzjzsb123 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C/C++ code


class childrenClass:public rootClass
{
public:
childrenClass(){}
// 这样才是初始化基类
childrenClass(int para1,int para2,int para3):rootClass( para1, para2, para3)
{

……
[/Quote]+
hen_hao_ji 2012-04-05
  • 打赏
  • 举报
回复

class childrenClass:public rootClass
{
public:
childrenClass(){}
// 这样才是初始化基类
childrenClass(int para1,int para2,int para3):rootClass( para1, para2, para3)
{

}
void show_children_data(){
show_r_data();
}
void set_children_data(int aa,int bb,int cc){
set_r_data(aa,bb,cc);
}
};
pengzhixi 2012-04-05
  • 打赏
  • 举报
回复
childrenClass(int para1,int para2,int para3){
rootClass( para1, para2, para3);
}
你这里构造的是一个临时对象,而不是初始化基类部分。google"初始化列表"

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧