tinnuv tinnuv
关注数: 2 粉丝数: 52 发帖数: 197 关注贴吧数: 57
关于多态性和虚函数问题有个不懂的点,希望有大神解答 //多重继承的两义性的程序代码如下: #include <iostream> using namespace std; class human { public: human(int); virtual ~human(){cout<<"析构人类"<<endl;} virtual int walk(){return itswalk;} virtual void setwalk(int walk){itswalk=walk;} private: int itswalk; }; human::human(int walk):itswalk(walk) { cout<<"创建人类"<<endl; } class father:public human { public: father(int walk,int wit); virtual ~father(){cout<<"析构父亲\n";} virtual int getwit()const{return itswit;} virtual int walk(){return itswalk;} virtual void setwalk(int walk){itswalk=walk;} protected: int itswit; int itswalk; }; father::father(int walk,int wit):human(walk),itswalk(walk), itswit(wit) { cout<<"创建父亲"<<endl; } class mother:public human { public: mother(bool sex,int walk); virtual ~mother(){cout<<"析构母亲\n";} 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<<"构造母亲\n"; } class son:public father,public mother { public: void beautiful()const{cout<<"儿子也很帅\n";} son(bool sex,int walk,int wit); virtual ~son(){cout<<"析构儿子\n";} virtual int getwit()const{return itswit;} virtual bool sex()const{return itsex;} virtual void setsex(bool sex){itsex=sex;} virtual int walk(){return itswalk;} private: int itswit; int itswalk; bool itsex; }; son::son(bool sex,int walk,int wit):father(walk, wit), mother(sex,walk), itsex(sex), itswit(wit), itswalk(walk) { cout<<"创建儿子\n"; } int main() { son *ps=new son(true,50,80); int wit=ps->getwit(); cout<<"儿子的智商为:"<<wit<<endl; cout<<"儿子的行走速度为:每小时"<<ps->walk()<<"英里。"<<endl; if(ps->sex())cout<<"儿子是男性。\n"; else cout<<"无法确定性别\n"; ps->father::setwalk(40); cout<<"父亲的行走速度为:每小时"<<ps->father::walk()<<"英里。"<<endl; ps->mother::setsex(false); if(ps->mother::sex()) cout<<"无法确定性别\n"; else cout<<"母亲是女性。\n"; delete ps; return 0; } 为什要用到setwalk和setsex函数呢? son::son(bool sex,int walk,int wit):father(walk, wit), mother(sex,walk), itsex(sex), itswit(wit), itswalk(walk) 子类里的构造函数不是能够直接传参吗? 我看有些代码里面又可以直接传参,不需要用到setwalk,setsex(详见二楼),我猜可能是虚函数继承的原因。 如:class mother:virtual public human 但问题就来了,为什么子类又不需要继承的时候加virtual呢? class son:public father,public mother //class son:virtual public father,virtual public mother 还有,为什么子类里面只用到setsex函数,而不用setwalk函数呢?
1 下一页