![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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)就不对了 求解释 展开
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)就不对了 求解释 展开
1个回答
展开全部
因为son的成员变量没有被有效的初始化!初始化列表的作用就是初始化成员变量或者基类对象。如果你不显示的初始化该类的成员变量,则默认的构造函数会被调用,因此你实际上的初始化值并不是TRUE,50,80,可能是随机数据。
追问
不是自己定义了构造函数 就不会调用默认的构造函数吗
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询