c++多重继承问题
#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classperson{prot...
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{ protected : string name;
int age;
public:
person( string sname, int a)
{ name=sname;
age=a;}
void set (string s,int a)
{ name=s; age=a;}
void print()
{cout<<name<<setw(5)<<age;}
person()//需要给one提供一个无参构造函数。
{
return; }
};
class student :public person
{ private : string ji;
public : student( string sname,int a,string j)
{ name=sname;
age=a;
ji=j;
}
void print()
{ cout<<name<<setw(5)<<age<<setw(5)<<ji; }
};
class teacher :public person
{ protected : string zhiye;
public : teacher(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
void set(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
void print()
{cout<<name<<setw(5)<<age<<setw(5)<<zhiye;}
};
class staff :public person
{ protected: string renwu;
public : staff(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
void set(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
void print()
{cout<<name<<setw(5)<<age<<renwu;}
};
class ts:public teacher,public staff//多重继承
{
public:
ts(string sname,int a,string z,string r)
{ name=sname;
age=a;
zhiye=z;
renwu=r;
}
void set(string sname,int a,string z,string r)
{ name=sname;
age=a;
zhiye=z;
renwu=r;
}
void print()
{cout<<name<<setw(5)<<age<<setw(5)<<zhiye<<renwu;}
};
void main()
{ ts dd("dai",20,"dd");
dd.print();
}我的TS类不能用啊,请教一下啊 展开
#include<string>
#include<iomanip>
using namespace std;
class person
{ protected : string name;
int age;
public:
person( string sname, int a)
{ name=sname;
age=a;}
void set (string s,int a)
{ name=s; age=a;}
void print()
{cout<<name<<setw(5)<<age;}
person()//需要给one提供一个无参构造函数。
{
return; }
};
class student :public person
{ private : string ji;
public : student( string sname,int a,string j)
{ name=sname;
age=a;
ji=j;
}
void print()
{ cout<<name<<setw(5)<<age<<setw(5)<<ji; }
};
class teacher :public person
{ protected : string zhiye;
public : teacher(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
void set(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
void print()
{cout<<name<<setw(5)<<age<<setw(5)<<zhiye;}
};
class staff :public person
{ protected: string renwu;
public : staff(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
void set(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
void print()
{cout<<name<<setw(5)<<age<<renwu;}
};
class ts:public teacher,public staff//多重继承
{
public:
ts(string sname,int a,string z,string r)
{ name=sname;
age=a;
zhiye=z;
renwu=r;
}
void set(string sname,int a,string z,string r)
{ name=sname;
age=a;
zhiye=z;
renwu=r;
}
void print()
{cout<<name<<setw(5)<<age<<setw(5)<<zhiye<<renwu;}
};
void main()
{ ts dd("dai",20,"dd");
dd.print();
}我的TS类不能用啊,请教一下啊 展开
4个回答
展开全部
派生类中的构造函数
派生类不从他的基类继承构造函数,然而,为派生类定义一个构造函数时,可以(而且应该包括对其中一个基类构造函数的调用,并将这个调用放到构造函数定义的初始化区域;
假如不包括对任何基类的调用,那么调用派生类构造函数时,就会自动调用基类的默认(无参数)构造函数。
象在本程序中Techer和Staff两个父类应该存在无参数构造函数,否则报错;
还有若两个父类中有相同的成员,需指明初始化的时那个类的成员,例teacher::name 等等。
你可以参考以下我帮你改正后的程序:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{
protected :
string name;
int age;
public:
person::person( string sname, int a)
{
name=sname;
age=a;
}
void set (string s,int a)
{
name=s;
age=a;
}
void print()
{
cout<<name<<setw(5)<<age;
}
person::person()//需要给one提供一个无参构造函数。
{
}
};
class student :public person
{
private :
string ji;
public :
student::student( string sname,int a,string j)
{
name=sname;
age=a;
ji=j;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<ji;
}
};
class teacher :public person
{
protected :
string zhiye;
public :
teacher::teacher()//需要给one提供一个无参构造函数。
{
}
teacher::teacher(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void set(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<zhiye;
}
};
class staff :public person
{
protected:
string renwu;
public :
staff::staff()//需要给one提供一个无参构造函数。
{
}
staff::staff(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void set(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void print()
{
cout<<name<<setw(5)<<age<<renwu;
}
};
class ts:public teacher,public staff//多重继承
{
public:
ts::ts(string sname,int a,string z,string r)
{
teacher::name=sname;
teacher::age=a;
zhiye=z;
renwu=r;
}
void set(string sname,int a,string z,string r)
{
teacher::name=sname;
teacher::age=a;
zhiye=z;
renwu=r;
}
void print()
{
cout<<teacher::name<<setw(5)<<teacher::age<<setw(5)<<zhiye<<renwu;
}
};
void main()
{
//cout<<"ok";
ts dd("kutpbpb",20,"professor","teaching");
dd.print();
}
仅代表kutpbpb个人观点, 和看法而已!!!
派生类不从他的基类继承构造函数,然而,为派生类定义一个构造函数时,可以(而且应该包括对其中一个基类构造函数的调用,并将这个调用放到构造函数定义的初始化区域;
假如不包括对任何基类的调用,那么调用派生类构造函数时,就会自动调用基类的默认(无参数)构造函数。
象在本程序中Techer和Staff两个父类应该存在无参数构造函数,否则报错;
还有若两个父类中有相同的成员,需指明初始化的时那个类的成员,例teacher::name 等等。
你可以参考以下我帮你改正后的程序:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{
protected :
string name;
int age;
public:
person::person( string sname, int a)
{
name=sname;
age=a;
}
void set (string s,int a)
{
name=s;
age=a;
}
void print()
{
cout<<name<<setw(5)<<age;
}
person::person()//需要给one提供一个无参构造函数。
{
}
};
class student :public person
{
private :
string ji;
public :
student::student( string sname,int a,string j)
{
name=sname;
age=a;
ji=j;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<ji;
}
};
class teacher :public person
{
protected :
string zhiye;
public :
teacher::teacher()//需要给one提供一个无参构造函数。
{
}
teacher::teacher(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void set(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<zhiye;
}
};
class staff :public person
{
protected:
string renwu;
public :
staff::staff()//需要给one提供一个无参构造函数。
{
}
staff::staff(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void set(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void print()
{
cout<<name<<setw(5)<<age<<renwu;
}
};
class ts:public teacher,public staff//多重继承
{
public:
ts::ts(string sname,int a,string z,string r)
{
teacher::name=sname;
teacher::age=a;
zhiye=z;
renwu=r;
}
void set(string sname,int a,string z,string r)
{
teacher::name=sname;
teacher::age=a;
zhiye=z;
renwu=r;
}
void print()
{
cout<<teacher::name<<setw(5)<<teacher::age<<setw(5)<<zhiye<<renwu;
}
};
void main()
{
//cout<<"ok";
ts dd("kutpbpb",20,"professor","teaching");
dd.print();
}
仅代表kutpbpb个人观点, 和看法而已!!!
展开全部
你没有注意在继承时要注意访问权限
当公有继承时,基类的私有-》子类不能访问
基类的保护-》子类的保护
基类的公有—》子类的公有
///////
然后你的代码有几点可以改进,
// 这个地方teacher,student,staff都应该用虚继承。
//子类的构造函数也不是你那样写的,应该这样写:
子类constructor(参数表):父类construcotr(对应的参数表),第二个父类。。。
就像下面代码中写的那样
#include "stdafx.h"
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{ protected : string name;
int age;
public:
person( string sname, int a)
{ name=sname;
age=a;}
void set (string s,int a)
{ name=s; age=a;}
void print()
{cout<<name<<setw(5)<<age;}
person()//需要给one提供一个无参构造函数。
{
return; }
};
class student :public person
{ private : string ji;
public : student( string sname,int a,string j)
{ name=sname;
age=a;
ji=j;
}
student(){};
void print()
{ cout<<name<<setw(5)<<age<<setw(5)<<ji; }
};
class teacher :public person
{ protected : string zhiye;
public : teacher(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
teacher(){}
void set(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
void print()
{cout<<name<<setw(5)<<age<<setw(5)<<zhiye;}
};
class staff :public person
{
protected: string renwu;
public : staff(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
staff(){}
void set(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
void print()
{cout<<name<<setw(5)<<age<<renwu;}
};
class ts:public teacher,public staff//多重继承
{
public:
ts(string sname,int a,string z,string r):teacher(sname,a,z),staff(sname,a,r)
{
//name=sname;
//age=a;
//zhiye=z;
//renwu=r;
}
void set(string sname,int a,string z,string r)
{
// name=sname;
//age=a;
//zhiye=z;
//renwu=r;
teacher::set(sname,a,z);staff::set(sname,a,r);
}
void print()
{
//cout<<name<<setw(5)<<age<<setw(5)<<zhiye<<renwu;
teacher::print();
staff::print();
}
};
void main()
{ ts dd("dai",20,"dd","unknow");
dd.print();
}
当公有继承时,基类的私有-》子类不能访问
基类的保护-》子类的保护
基类的公有—》子类的公有
///////
然后你的代码有几点可以改进,
// 这个地方teacher,student,staff都应该用虚继承。
//子类的构造函数也不是你那样写的,应该这样写:
子类constructor(参数表):父类construcotr(对应的参数表),第二个父类。。。
就像下面代码中写的那样
#include "stdafx.h"
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{ protected : string name;
int age;
public:
person( string sname, int a)
{ name=sname;
age=a;}
void set (string s,int a)
{ name=s; age=a;}
void print()
{cout<<name<<setw(5)<<age;}
person()//需要给one提供一个无参构造函数。
{
return; }
};
class student :public person
{ private : string ji;
public : student( string sname,int a,string j)
{ name=sname;
age=a;
ji=j;
}
student(){};
void print()
{ cout<<name<<setw(5)<<age<<setw(5)<<ji; }
};
class teacher :public person
{ protected : string zhiye;
public : teacher(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
teacher(){}
void set(string sname,int a,string z)
{ name=sname;
age=a;
zhiye=z;
}
void print()
{cout<<name<<setw(5)<<age<<setw(5)<<zhiye;}
};
class staff :public person
{
protected: string renwu;
public : staff(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
staff(){}
void set(string sname,int a,string r)
{name=sname;
age=a;
renwu=r;
}
void print()
{cout<<name<<setw(5)<<age<<renwu;}
};
class ts:public teacher,public staff//多重继承
{
public:
ts(string sname,int a,string z,string r):teacher(sname,a,z),staff(sname,a,r)
{
//name=sname;
//age=a;
//zhiye=z;
//renwu=r;
}
void set(string sname,int a,string z,string r)
{
// name=sname;
//age=a;
//zhiye=z;
//renwu=r;
teacher::set(sname,a,z);staff::set(sname,a,r);
}
void print()
{
//cout<<name<<setw(5)<<age<<setw(5)<<zhiye<<renwu;
teacher::print();
staff::print();
}
};
void main()
{ ts dd("dai",20,"dd","unknow");
dd.print();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
凑合看吧:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{
protected :
string name;
int age;
public:
person( string sname, int a)
{
name=sname;
age=a;
}
void set (string s,int a)
{
name=s; age=a;}
void print()
{
cout<<name<<setw(5)<<age;
}
person()//需要?one提供一???构造函?。
{
return;
}
};
class student :virtual public person
{
private :
string ji;
public :
student( string sname,int a,string j)
{
name=sname;
age=a;
ji=j;
}
void print()
{ cout<<name<<setw(5)<<age<<setw(5)<<ji; }
};
class teacher : virtual public person
{
protected :
string zhiye;
public :
teacher(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void set(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<zhiye;
}
};
class staff : virtual public person
{
protected:
string renwu;
public :
staff(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void set(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void print()
{
cout<<name<<setw(5)<<age<<renwu;
}
};
class ts:public teacher,public staff//多重?承
{
public:
ts(string sname,int a,string z,string r) :teacher(sname,a,z),staff(sname,a,r)
{
}
void set(string sname,int a,string z,string r)
{
name=sname;
age=a;
zhiye=z;
renwu=r;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<zhiye<<renwu;
}
};
void main()
{
ts dd("dai",20,"dd","rr");
dd.print();
}
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class person
{
protected :
string name;
int age;
public:
person( string sname, int a)
{
name=sname;
age=a;
}
void set (string s,int a)
{
name=s; age=a;}
void print()
{
cout<<name<<setw(5)<<age;
}
person()//需要?one提供一???构造函?。
{
return;
}
};
class student :virtual public person
{
private :
string ji;
public :
student( string sname,int a,string j)
{
name=sname;
age=a;
ji=j;
}
void print()
{ cout<<name<<setw(5)<<age<<setw(5)<<ji; }
};
class teacher : virtual public person
{
protected :
string zhiye;
public :
teacher(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void set(string sname,int a,string z)
{
name=sname;
age=a;
zhiye=z;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<zhiye;
}
};
class staff : virtual public person
{
protected:
string renwu;
public :
staff(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void set(string sname,int a,string r)
{
name=sname;
age=a;
renwu=r;
}
void print()
{
cout<<name<<setw(5)<<age<<renwu;
}
};
class ts:public teacher,public staff//多重?承
{
public:
ts(string sname,int a,string z,string r) :teacher(sname,a,z),staff(sname,a,r)
{
}
void set(string sname,int a,string z,string r)
{
name=sname;
age=a;
zhiye=z;
renwu=r;
}
void print()
{
cout<<name<<setw(5)<<age<<setw(5)<<zhiye<<renwu;
}
};
void main()
{
ts dd("dai",20,"dd","rr");
dd.print();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
基类里面要重载的函数 都写成虚函数!!实现动态绑定
还有 被保护的成员不能被本类修改 只能由他的派生类修改 把所有的protected都换成私有的private
还有 被保护的成员不能被本类修改 只能由他的派生类修改 把所有的protected都换成私有的private
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询