2013-10-16 68 views
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; 
} 

試圖實現一個虛擬的基類學生。問題是要找到Test類中分數的總和以及Sports類中的分數。但是,我得到0作爲輸出,而不是80. 任何人都可以請解釋這一點?奇怪的輸出虛擬基類

+0

你使用什麼編程語言?你可能想標記。 – Trevor

+1

「虛擬基類」並不意味着你實例化的每個對象都使用相同的基類對象。 –

回答

0

你有一些基本的誤解。

ob1ob2不是ob3的一部分。它們是完全獨立的對象。 Total確實有Test部分和Sports部分,但由於其默認構造函數而使用0值初始化它們。

0

您將基於類的OOP的理解與基於原型的OOP混合在一起。在後者中,一個對象派生自其他對象(已存在於內存中的實體),因此派生對象具有它們派生自的基礎對象的變量值。 C++是一種基於類的語言,其中內存中的對象是類的實例,而類僅僅是新的用戶定義類型的聲明,並且它們不是內存中的對象。請參閱this link瞭解更多詳情。