이것은 다음 문항입니다.파생 클래스의 생성자를 정의하여 두 기본 클래스의 개인 데이터 멤버를 인스턴스화하는 방법은 무엇입니까?
foll을 사용하여 Student라는 기본 클래스를 설계하십시오. 2 필드 : - (i) 이름 (ii) 이드. 학생 기본 수업에서 스포츠 및 시험이라는 두 클래스 을 파생시킵니다. Class Sports에는 s_grade라는 필드가 있고 클래스 Exam에는 정수 필드 인 e_grade라는 필드가 있습니다. 스포츠 및 시험을 상속받은 결과 이라는 클래스를 파생시킵니다. 이 클래스에는 문자 배열 또는 문자열 필드가있어서 최종 결과를 나타냅니다. 또한 최종 결과를 표시하는 데 사용할 수있는 display라는 멤버 함수가 있습니다. 메인 클래스에서 이러한 클래스의 사용법을 설명하십시오.
#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();
}
};
이것은 내 시도 였지만 매우 심각한 결함이 있습니다.
모든 솔루션?
도움을 주시면 감사하겠습니다.
1. 문자열을 const 참조로 전달하십시오. 2. 초기화 목록을 사용하십시오. 3. 무엇이 문제인가 –
'Students :: display();에 대한 호출은 애매하기 때문에 컴파일해서는 안됩니다 :'Results' 클래스는'Student'의 인스턴스 두 개를 포함합니다 - 하나는'Sports'를 통해, 다른 하나는' 하나는 '시험'이다. – cdhowie
@cdhowie 나는 이제 '학생'을 상속하기 위해 가상의 상속을 사용했다. 아직 컴파일되지 않습니다. 어떻게해야합니까? –