C++之 多继承

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
在学校里有老师和门生,他们都是人,我么应该创建一个名为 Person 的基类和两个名为 Teacher 和Student 的子类,后两者是从前者继承来的
有一部分门生还教课挣钱(助教),也就是同时存在着两个”是一个”关系,我们须要写一个 TeschingStudent 类让它同时继承 Teacher 类和 Student 类,换句话说,就是须要利用多继承。
  1. // 基本语法:
  2. class TeachingStudent : public Student, public Teacher
  3. { … }
复制代码
  1. #include<iostream>
  2. #include<string>
  3. class Person //基类
  4. {
  5.         public:
  6.                 Person(std::string theName);
  7.                 void introduce();
  8.         protected:
  9.                 std::string name;       
  10. };
  11. class Teacher:public Person //老师类
  12. {
  13.         public:
  14.                 Teacher(std::string theName,std::string theClass);
  15.                 void teach();
  16.                 void introduce();
  17.         protected:
  18.                 std::string classes;                       
  19. };
  20. class Student:public Person //学生类
  21. {
  22.         public:
  23.                 Student(std::string theName,std::string theClass);
  24.                 void attendClass();
  25.                 void introduce();
  26.         protected:
  27.                 std::string classes;                       
  28. };       
  29. class TeachingStudent:public Student,public Teacher //学生助教类
  30. {
  31.         public:
  32.                 TeachingStudent(std::string theName,std::string classTeaching,std::string classAttending);
  33.                 void introduce();
  34. };
  35. Person::Person(std::string theName)
  36. {
  37.         name=theName;
  38. }
  39. void Person::introduce()
  40. {
  41.         std::cout<<"Hello,I`m"<<name<<"。\n\n";
  42. }
  43. Teacher::Teacher(std::string theName,std::string theClass):Person(theName)
  44. {
  45.         classes=theClass;
  46. }
  47. void Teacher::teach()
  48. {
  49.         std::cout<<name<<"教"<<classes<<"。\n\n";        
  50. }
  51. void Teacher::introduce()
  52. {
  53.         std::cout<<"大家好,我是"<<name<<",我教"<<classes<<"。\n\n";
  54. }
  55. Student::Student(std::string theName,std::string theClass):Person(theName)
  56. {
  57.         classes=theClass;
  58. }
  59. void Student::attendClass()
  60. {
  61.         std::cout<<name<<"加入"<<classes<<"学习。\n\n";
  62. }
  63. void Student::introduce()
  64. {
  65.         std::cout<<"大家好,我是"<<name<<",我在"<<classes<<"学习\n\n";
  66. }
  67. TeachingStudent::TeachingStudent(std::string theName,std::string classTeaching,std::string classAttending): Teacher(theName,classTeaching),Student(theName,classAttending)
  68. {
  69.        
  70. }
  71. void TeachingStudent::introduce()
  72. {
  73.                 std::cout<<"大家好,我是"<<Student::name<<",我教"<<Teacher::classes<<",";
  74.                 std::cout<<"同时我在"<<Student::classes<<"学习。\n\n";
  75. }
  76. int main()
  77. {
  78.         Teacher  teacher("小红","入门班");
  79.         Student student("兰兰","C++入门班");
  80.         TeachingStudent teachingStudent("茗茗","C++入门班级","C++进阶班");
  81.        
  82.         teacher.introduce();
  83.         teacher.teach();
  84.        
  85.         student.introduce();
  86.         student.attendClass();
  87.        
  88.         teachingStudent.introduce();
  89.         teachingStudent.teach();
  90.         teachingStudent.attendClass();
  91.        
  92.         return 0;
  93. }
复制代码
 
留意:

  • 在利用多继承的时间,一定要特别留意继承了基类的多少个副本。
  • 在利用多继承的时间,最安全最简明的做法是从没有任何属性且只有抽象方法的类开始继承。
  • 按照上边这么做可以让你阔别后代子类大概拥有好几个基类属性的题目。
  • 如许的类又叫做接口( interface )。

未完待续。。。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表