0
#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。有人可以解释一下吗?

4

2 回答 2

0

你有一些基本的误解。

ob1并且ob2不属于ob3. 它们是完全独立的对象。Total确实有Test一部分和Sports一部分,但由于它们的默认构造函数,它们被初始化为 0 值。

于 2013-10-16T18:04:46.470 回答
0

您将对基于类的 OOP 的理解与基于原型的 OOP 混合在一起。在后者中,对象从其他对象(已经在内存中的实体)派生,因此派生对象具有派生它们的基础对象的变量值。C++ 是一种基于类的语言,其中内存中的对象是类的实例化,而类只是新的用户定义类型的声明,它们不是内存中的对象。请查看此链接以获取更多详细信息。

于 2013-10-16T18:32:57.720 回答