![](/img/trans.png)
[英]How to copy private members of a base class in to a derived class's copy constructor
[英]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.