c++ - 如何通过定义派生类的构造函数来实例化两个基类的私有(private)数据成员?

标签 c++ class inheritance derived-class diamond-problem

这是问题陈述:

用下面的代码设计一个名为 Student 的基类。 2 个字段:- (i) 姓名 (ii) 身份证。派生2类 从 Student 基类调用 Sports and Exam。 Class Sports 有一个字段叫做 s_grade 和 Exam 类有一个名为 e_grade 的字段,它是整数字段。派生一个名为 Results 的类 继承自体育和考试。这个类有一个字符数组或字符串字段来表示 最后的结果。它还有一个名为 display 的成员函数,可用于显示 最后结果。举例说明这些类在 main 中的用法。

#include<iostream>
#include<string>
using namespace std;

class Student
{
    string name;
    int id;

    public:
        Student(string n, int a)    {name = n; id = a;}
        void display()  
        {
            cout<<"Student name: "<<name;
            cout<<"\nStudent I.D.: "<<id;
        }
};

class Sports : public Student
{
    int s_grade;

    public:
        Sports(string n, int a,int s):Student(n,a)  {s_grade = s;}
        void display()  
        {
            cout<<"\nSports grade: "<<s_grade;
        }
};

class Exam: public Student
{
    int e_grade;

    public:
        Exam(string n, int a,int e):Student(n,a)    {e_grade = e;}
        void display()  
        {   
            cout<<"\Exam grade: "<<e_grade;
        }
};

class Results: public Sports, public Exam
{
    string result;

    public:
        Results(string n,int i, int s, int e):Sports(n,i,s):Exam(n,i,e) {}
        void display()
        {
            Student::display();
            Sports::display();
            Exam::display();
        }
};

这是我的尝试,但存在严重缺陷。

有什么解决办法吗?

非常感谢任何帮助。

最佳答案

学生类(class)必须是虚拟的。否则结果将有两份学生成员。这将导致歧义。

关于c++ - 如何通过定义派生类的构造函数来实例化两个基类的私有(private)数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447858/

相关文章:

python - mypy 通用子类导致不兼容的类型

javascript - 如何在从另一个构造函数类继承的方法中添加更多信息而不用新的信息替换该信息?

c++ - 任何人都知道任何可以使用 C++ 以字节为单位编码 asm 字符串的东西吗?

c++ - Boost mpl 转换序列 "real"类型

python - 为什么在复制自定义对象时 deepcopy 失败并显示 "KeyError: ' __deepcopy_ _'"?

php - 为什么不能在类内的数组值中使用运算符?

c++ - 如何保持服务器运行(cpprestsdk - 卡萨布兰卡)

C++ 快速将 2 个数组相加

Java - 如何让类 1 和类 2 互相了解?

java - 为什么不从父类(super class)继承 OSGi 声明性服务 (DS) 注释?