#include <iostream>
using namespace std;
class Student{
protected:
int roll_no;
public:
void getNumber(){
cout << "Enter number\n";
cin >> roll_no;
}
int putNumber(){
return roll_no;
}
};
class Test:public virtual Student{
protected:
int m1,m2;
public:
Test(){
m1=m2=0;
}
Test(int a, int b){
m1=a;
m2=b;
}
void display(){
cout << "Mark 1: " << m1;
cout << "Mark 2: " << m2;
}
};
class Sports:public virtual Student{
protected:
int score;
public:
Sports(){
score=0;
}
Sports(int a){
score=a;
}
void display(){
cout << "Score: " << score;
}
};
class Total:public virtual Test,public virtual Sports{
private:
int total;
public:
Total(){
total=0;
}
int display(){
total=m1+m2+score;
return total;
}
};
int main(){
Test ob1(10,20);
Sports ob2(50);
Total ob3;
cout << ob3.display() << endl;
}
尝试实现虚拟基类Student。问题是要找到Test类中的标记和Sports类中的分数之和。但是,我输出0而不是80。 有人可以解释一下吗?
答案 0 :(得分:0)
你有一些根本的误解。
ob1
和ob2
不属于ob3
。它们是完全独立的对象。 Total
确实有Test
部分和Sports
部分,但由于它们的默认构造函数,它们被初始化为0值。
答案 1 :(得分:0)
您将对基于类的OOP的理解与基于原型的OOP相结合。在后者中,一个对象派生自其他对象(已经在内存中的实体),因此派生对象具有从中派生的基础对象的变量值。 C ++是一种基于类的语言,其中内存中的对象是类的实例化,而类只是新用户定义类型的声明,它们不是内存中的对象。有关详细信息,请查看this link。