c++之多继承

什么时候要用到多继承  ?

当遇到的问题无法只用" 是一个 " 关系来描述的时候 , 就用多继承 ;

例如 : 老师与学生 就继承自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){.....};

 

虚继承的类不能拷贝父类的属性 , 子类如果要使用该属性必须继承该类,而不是它的子类中获取;
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值