C++多重继承的问题,大神请进。

#include<iostream>usingnamespacestd;classhuman{public:human(int);virtual~human(){cout... #include<iostream>
using namespace std;
class human
{
public:
human(int);
virtual ~human(){cout<<"析构人类"<<endl;}
virtual int walk(){return itwalk;}
virtual void setwalk(int w){itwalk=w;}
private:
int itwalk;
};
human::human(int a):itwalk(a)
{
cout<<"人类的构造函数"<<endl;
}
class father:public human
{
public:
father(int walk,int swit);
virtual ~father(){cout<<"析构父亲"<<endl;}
virtual int getwit(){return itswit;}
virtual int walk(){return itwalk;}
virtual void setwalk(int w){itwalk=w;}
private:
int itwalk;
int itswit;
};
father::father(int walk,int swit):human(walk),itwalk(walk),itswit(swit)
{

cout<<"创建父亲"<<endl;

}

class mother:public human
{
public:
mother(bool sex,int walk);
virtual ~mother(){cout<<"析构母亲"<<endl;}
virtual bool sex()const{return itsex;}
virtual void setsex(bool sex){itsex=sex;}
protected:
bool itsex;

};

mother::mother(bool sex,int walk):human(walk),itsex(sex)
{
cout<<"构造母亲"<<endl;
}
class son:public father,public mother
{
public:
void beautiful()const{cout<<"儿子也很帅\n"<<endl;}
son(bool sex,int walk,int swit);
~son(){cout<<"析构儿子"<<endl;}
virtual int getwit(){return itswit;}
virtual bool sex()const{return itsex;}
virtual int walk(){return itwalk;}
virtual void setsex(bool sex){itsex=sex;}
private:
int itswit;
int itwalk;
bool itsex;
};
son::son(bool sex,int walk,int swit):father(walk,swit),mother(sex,walk)//,itsex(sex),itswit(swit),itwalk(walk)
{
cout<<"构造儿子\n"<<endl;
}
int main()
{
son *ps=new son(true,50,80);
delete ps;

return 0;
}
为什么去掉sex(sex),itswit(swit),itwalk(walk)就不对了 求解释
展开
 我来答
单身向右
2014-10-27 · TA获得超过123个赞
知道答主
回答量:63
采纳率:0%
帮助的人:63.4万
展开全部
因为son的成员变量没有被有效的初始化!初始化列表的作用就是初始化成员变量或者基类对象。如果你不显示的初始化该类的成员变量,则默认的构造函数会被调用,因此你实际上的初始化值并不是TRUE,50,80,可能是随机数据。
追问
不是自己定义了构造函数   就不会调用默认的构造函数吗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式