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 を実装しようとしています。問題は、テストクラスの点数とスポーツクラスのスコアの合計を見つけることです。ただし、出力として 80 ではなく 0 を取得しています。誰か説明してもらえますか?

4

2 に答える 2

0

いくつかの根本的な誤解があります。

ob1の一部ではありob2ませんob3。それらは完全に別のオブジェクトです。部分と部分Totalがありますが、デフォルトのコンストラクターのために 0 値で初期化されます。TestSports

于 2013-10-16T18:04:46.470 に答える
0

クラスベースの OOP の理解とプロトタイプベースの OOP を混ぜ合わせます。後者では、1 つのオブジェクトが他のオブジェクト (既にメモリ内にあるエンティティ) から派生するため、派生オブジェクトは派生元のベース オブジェクトの変数の値を持ちます。C++ は、メモリ内オブジェクトがクラスのインスタンス化であるクラスベースの言語ですが、クラスは新しいユーザー定義型の単なる宣言であり、メモリ内オブジェクトではありません。詳細については、このリンクをご覧ください。

于 2013-10-16T18:32:57.720 に答える