首页 > 编程语言 >C++快速入门 第二十八讲:多继承(multiple inheritance)

C++快速入门 第二十八讲:多继承(multiple inheritance)

时间:2023-08-18 15:13:17浏览次数:34  
标签:multiple string inheritance 继承 C++ Person introduce theName include

  1 多继承语法:
  2 
  3 //助教类既继承于老师类,又继承于学生类 
  4 class Assistant:public Teacher,public Student
  5 {
  6 };
  7 
  8 当遇到的问题无法只用一个“是一个”关系来描述的时候,就是多继承出场的时候。例即是学生,又是人,还是助教。
  9 
 10 #include <iostream>
 11 #include <string> 
 12 
 13 using namespace std;
 14 
 15 #include <string>
 16 //人类 
 17 class Person
 18 {
 19 public:
 20     Person(string theName);//构造函数,theName为类的输入参数 
 21     void introduce();
 22 protected:
 23     string name;
 24 };
 25 Person::Person(string theName)//构造函数实现 
 26 {
 27     name = theName;
 28 }
 29 void Person::introduce()//introduce()函数实现 
 30 {
 31     cout << "大家好,我是" << name << "。\n\n";
 32 }
 33 
 34 //老师类继承于人类 
 35 class Teacher:public Person
 36 {
 37 public:
 38     Teacher(string theName,string theClass);
 39     
 40     void teach();//教书 
 41     void introduce();
 42 protected:
 43     string classes;
 44 };
 45 Teacher::Teacher(string theName,string theClass):Person(theName)//老师的名字继承于人类中的名字 
 46 {
 47     classes = theClass;
 48 }
 49 void Teacher::teach()
 50 {
 51     cout<< name << " 教 "<< classes << "。\n\n";
 52 }
 53 void Teacher::introduce()
 54 {
 55     cout<<"大家好,我是 "<< name <<" ,我教 "<< classes << "。\n\n";
 56 }
 57 
 58 //学生类继承于人类
 59 class Student:public Person 
 60 {
 61 public:
 62     Student(string theName,string theClass);
 63     
 64     void attendClass();//要上课 
 65     void introduce();
 66 protected:
 67     string classes;
 68 };
 69 Student::Student(string theName,string theClass):Person(theName)//学生名字继承于人类中的名字 
 70 {
 71     classes = theClass;
 72 }
 73 void Student::attendClass()
 74 {
 75     cout<< name <<"加入"<< classes << "学习。\n\n";
 76 }
 77 void Student::introduce()
 78 {
 79     cout<< "大家好,我是" << name << ",我在" << classes << "学习。\n\n";
 80 }
 81 
 82 //助教类既继承于老师类,又继承于学生类 
 83 class Assistant:public Teacher,public Student
 84 {
 85 public:
 86     Assistant(string theName,string classTeaching,string classAttending);
 87     
 88     void introduce();
 89 };
 90 Assistant::Assistant(string theName,string classTeaching,string classAttending):Teacher(theName, classTeaching),Student(theName,classAttending)
 91 {
 92 
 93 //多继承 助教既继承老师类,又继承学生类 
 94 
 95 }
 96 void Assistant::introduce()
 97 {
 98     cout << "大家好,我是" << Student::name << ".我教" << Teacher::classes << ",";
 99     cout << "同时我在" << Student::classes << "学习。\n\n"; 
100 }
101 
102 int main()
103 {
104     Teacher teacher("小甲鱼","C++入门班");
105     Student student("迷途羔羊","C++入门班");
106     Assistant assistant("丁丁","C++入门班","C++进阶班");
107     
108     teacher.introduce();
109     teacher.teach();
110     
111     student.introduce();
112     student.attendClass();
113     
114     assistant.introduce();
115     assistant.teach();
116     assistant.attendClass();
117     
118     return 0;
119 }

标签:multiple,string,inheritance,继承,C++,Person,introduce,theName,include
From: https://www.cnblogs.com/ybqjymy/p/17640559.html

相关文章

  • C++快速入门 第三十讲:错误处理和调试
    程序出错可以分为两大类:编译时出错(complie-timeerror)和运行时错误(run-timeerror)suggest1:培养并保持一种编程风格suggest2:认真对待编译器给出的错误/警告信息suggest3:写代码三思而后行(先画流程图)suggest4:注意检查最基本的语法suggest5:把可能有问题的代码行注释suggest......
  • C++快速入门 第二十九讲:虚继承
    通过虚继承某个基类,就是在告诉编译器:从当前这个类再派生出来的子类只能拥有那个基类的一个实例。虚继承的语法:1classTeacher:virtualpublicPerson23{45}这样做的话便可以让Student和Teacher类都虚继承自Person类,编译器将确保从Student和Teacher类再派生出来的子......
  • C++快速入门 第三十一讲:错误处理与调试2
    让函数返回错误代码实例:范围限制1#include<iostream>2#include<climits>34usingnamespacestd;5classFactorial6{7public:8Factorial(unsignedshortnum);9unsignedlonggetFactorial();10boolinRange();1112private......
  • C++快速入门 第三十二讲:assert函数和捕获异常
    C语言和C++都有一个专门为调试而准备的工具函数---assert函数。这个函数是在assert.h库文件里定义的。实例1:assert函数应用1#include<cassert>2//assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态3//如果为真Donothing4//如果为假Dosomething......
  • C++快速入门 第十八讲:访问控制
    访问控制:C++提供用来保护(保护意思是对谁可以调用某个方法和访问某一个属性加上一个限制)类里的方法和属性的手段实例1:访问级别应用1//级别允许谁来访问2//public任何代码3//protected这个类本身和它的子类4//private只有......
  • C++无法将类的成员函数赋值给一般的函数指针,解决方案
    遇到需要绑定回调函数的API接口。看了定义的函数指针,是静态的函数指针,将非静态的类成员函数赋值过去的时候,无法编译通过。将成员函数改成静态又得将整个类的内容都改成静态。这种情况下,可以构造匿名函数,引用this,这样可以在类中,将自己的成员函数赋值给需要的函数指针类型上:ser......
  • C++快速入门 第六讲:函数的重载
    函数重载:实质就是用同样的名字再定义一个有着不同参数类型及个数来实现不同操作的函数。实例1:改变同一函数的输入参数类型1#include<iostream>23voidconvertTemperature(doubletempIn,chartypeIn);4voidconvertTemperature(inttempIn,chartypeIn);5......
  • C++快速入门 第七讲:复杂的数据类型
    数组:可以把许多个同类型的值存储在同一变量名下实例1:输入的数据存储到数组中,并计算其和与平均值输出1#include<iostream>23usingnamespacestd;//使用作用域45intmain()6{7intarray[10];8inti;9intsum=0;10doubleaverage;......
  • C++快速入门 第八讲:复杂的数据类型——指针
    小知识:程序以文件的形式存储在硬盘,但它们却是在计算机的内存中运行对于变量可以通过变量名与地址两种方式进行索引,变量的地址在程序执行期间是不会发生变换的地址是计算机内存中的某个位置;指针是专门用来存放地址的特殊类型变量......
  • C++快速入门 第九讲:复杂的数据类型——指针02
    指针的类型必须与由它保存其地址的变量的类型一致,当某个变量的地址给了指针p时,就可以通过*p(即表示该地址的数据)来对该变量数据进行操作一定要牢记一个事实:指针所保存的是内存中的一个地址,它并不保存指向的数据的值本身。因此务必确保指针对应一个已经存在的变量或者一块已经分配......