繁体   English   中英

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

[英]How can I instantiate private data members of two base classes by defining a constructor of a derived class?

这是问题陈述:

设计一个称为“学生”的基类。 2个字段:-(i)名称(ii)ID。 从学生基础课派生两个称为“体育和考试”的课。 体育课有一个名为s_grade的字段,考试课有一个名为e_grade的字段,它们是整数字段。 派生一个名为Results的类,该类继承自Sports and Exam。 此类具有一个字符数组或字符串字段来表示最终结果。 它还具有一个名为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();
        }
};

这是我的尝试,但这有很大的缺陷。

有什么办法吗?

任何帮助深表感谢。

学生班必须是虚拟的。 否则,将有两个副本的学生会员。 这将导致模棱两可。

从“学生”类派生“运动”和“考试”时,应使用虚拟继承。 这将确保仅为一个Results对象创建一个Student实例。

#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 : virtual 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: virtual 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();
        }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM