什么时候要用到多继承 ?
当遇到的问题无法只用" 是一个 " 关系来描述的时候 , 就用多继承 ;
例如 : 老师与学生 就继承自person类 ,但助教既是学生 ,也是老师 ;所以使用多继承 ;
基本语法 :
class TeachStduent : public Student ,public Teacher {...};
#include <string>
#include <iostream>
class Person{
public :
Person(std::string theName);
void introduce();
protected:
std::string name;
};
class Teacher :public Person{
public :
Teacher(std::string theName,std::string theClass);
void teach();
void introduce();
protected:
std::string classes;
};
class Student :public Person{
public :
Student(std::string theName,std::string theClass);
void attendClass();
void introduce();
protected:
std::string classes;
};
class TeachingStudent : public Student ,public Teacher {
public :
TeachingStudent(std::string theName , std::string classTeaching , std::string classAttending);
void introduce();
};
Person::Person(std::string theName){
name = theName;
}
void Person::introduce(){
std::cout <<"hello everyone ,i am "<<name<<"\n";
}
Teacher ::Teacher(std::string theName,std::string theClass):Person(theName){
classes = theClass;
}
void Teacher::teach(){
std::cout <<name <<"teach "<<classes<<"\n\n";
}
void Teacher::introduce(){
std::cout <<"hello everyONe,im "<< name<<", i Teach "<<classes<<"\n";
}
Student::Student(std::string theName,std::string theClasses):Person(theName){
classes = theClasses;
}
void Student::introduce(){
std::cout <<"hello all,i am "<<name <<" , i study with "<<classes <<"\n\n";
}
void Student::attendClass(){
std::cout <<name <<"jump "<<classes <<"\n\n";
}
TeachingStudent::TeachingStudent(std::string theName,std::string classTeach,std::string classAttend):Teacher(theName,classTeach),Student(theName,classAttend){
}
void TeachingStudent::introduce(){
std::cout << "hello all , i am "<<Student::name <<",, i teach "<<Teacher::classes<<",,";
std::cout <<" same time i study at "<< Student::classes << "\n\n";
}
int _tmain(int argc, _TCHAR* argv[])
{
Teacher teacher("小甲鱼","C++入门班");
Student stu("nightWish","c++基础班");
TeachingStudent teachStu("丁丁","c++入门踏板","c++进阶班");
teacher.introduce();
teacher.teach();
stu.introduce();
stu.attendClass();
teachStu.introduce();
teachStu.attendClass();
teachStu.teach();
system("pause"); }
虚继承 : virtual inheritance ;
语法 :
class Teacher : virtual Public Person {....}
修改后的TeachStudent应该 ;
class Teacher(std::string theName,std::string classes):virtual public Person{...}
class TeachStudent (std::string theName,std::string teachClasses,std::string attendClass):Teacher(theName,teachClasses),Student(theName,attendClass),Person(theName){.....};
虚继承的类不能拷贝父类的属性 , 子类如果要使用该属性必须继承该类,而不是它的子类中获取;