鱼C论坛

 找回密码
 立即注册
查看: 2864|回复: 5

[学习笔记] C++快速入门28多继承课上代码

[复制链接]
发表于 2023-12-20 09:08:38 | 显示全部楼层
代码中存在多继承的情况,在类TeachingStudent中继承了Teacher和Student两个类。这种情况下,需要注意解决潜在的二义性问题。

在子类TeachingStudent中,由于Teacher和Student类都有introduce()成员函数,因此会出现二义性。可以通过以下方法解决:

1. 使用作用域限定符解决二义性问题:
  1. void TeachingStudent::introduce()
  2. {
  3.     Teacher::introduce();        // 调用Teacher类的introduce()方法
  4. }
复制代码

2. 在TeachingStudent类中重新实现introduce()方法:
  1. void TeachingStudent::introduce()
  2. {
  3.     std::cout << "My name is " << name << ". I am a teaching student." << std::endl;
  4. }
复制代码

另外,还需要在每个子类的构造函数中调用基类的构造函数来初始化基类的成员变量,可以使用成员初始化列表来完成,例如:
  1. Teacher::Teacher(std::string theName,std::string theClasses)
  2.     : Person(theName), classes(theClasses)
  3. {
  4. }
  5. Student::Student(std::string theName,std::string theClasses)
  6.     : Person(theName), classes(theClasses)
  7. {
  8. }
  9. TeachingStudent::TeachingStudent(std::string theName,std::string theLearnClasses,std::string theTeachClasses)
  10.     : Teacher(theName, theTeachClasses), Student(theName, theLearnClasses)
  11. {
  12. }
复制代码

这样就可以正确地创建Teacher、Student和TeachingStudent对象,并且可以调用各自的成员函数进行操作了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-20 09:09:33 | 显示全部楼层

哈哈,看来我回答得有点晦涩难懂了。不好意思,让我再来解释一下。

在C++中,多继承是指一个类同时继承了多个基类的特性。在代码中,TeachingStudent类同时继承了Teacher和Student类。这样的话,TeachingStudent就拥有了Teacher和Student两个类的成员变量和成员函数。

但是,由于Teacher类和Student类都有introduce()成员函数,所以在TeachingStudent类中调用introduce()时会发生二义性问题。为了解决这个问题,我们可以使用作用域限定符或者在TeachingStudent类中重新实现introduce()方法。

方法1:使用作用域限定符
在TeachingStudent类中的introduce()方法中,可以使用Teacher::introduce()或Student::introduce()来明确调用要使用的父类的introduce()方法。

方法2:在TeachingStudent类中重新实现introduce()方法
在TeachingStudent类中重新实现一个introduce()方法,来覆盖父类的introduce()方法。可以在这个方法中选择调用Teacher::introduce()或Student::introduce()来完成具体的操作。

希望这次能够更加清楚地解释多继承的问题了。如果还有疑问,请随时提出来哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-20 09:36:19 | 显示全部楼层
回响_ 发表于 2023-12-20 09:36
修改:
void Teacher::teach()
{
        std::cout

非常抱歉,之前的回答有误。下面是正确的代码:
  1. void Teacher::teach(){
  2.     std::cout << "我是" << name << "老师,我教授" << classes << "课程" << std::endl;
  3. }
复制代码

在Teacher类中实现了teach()方法,用于输出老师的姓名和教授的课程。其中name和classes是Teacher类的成员变量,通过this指针访问。

不好意思之前的回答有误,请谅解。如果还有其他问题,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 18:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表