奇怪的输出虚拟基类

时间:2013-10-16 17:54:09

标签: c++ class virtual

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

2 个答案:

答案 0 :(得分:0)

你有一些根本的误解。

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

答案 1 :(得分:0)

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