匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 10 年前

C++ 虛擬函式呼叫問題

以下是一個分數輸入和列印的程式

class A{

public:

A(int Chi = 0)

{this->Chi = Chi;}

virtual void Input(){

cout << "請輸入國文成績:";

cin >> Chi;

}

virtual void Print(){

cout << "國文成績:" << Chi;

}

protected:

int Chi;

};

class B:public A{

public:

A(int Chi = 0, int Math = 0):A(Chi)

{this->Math= Math;}

virtual void Input(){

cout << "請輸入數學成績:";

cin >> Math;

}

virtual void Print(){

cout << "數學成績:" << Math;

}

protected:

int Math;

};

void main(){

A *a;

B b;

a = &b

b.Input();

b.Print();

}

我想請問,如何在class B裡面呼叫class A的國文輸入函式

使得呼叫b.Input();時也能輸入b的國文成績,呼叫b.Print();也能列印b的國文成績

1 個解答

評分
  • 其威
    Lv 7
    10 年前
    最佳解答

    #include <iostream>

    using namespace std;

    class A{

    public:

    // 避免在 c-tor 裡面設定參數,應該使用 member initialization list

    // A(int Chi = 0)

    // {this->Chi = Chi;}

    A(int c = 0):

    Chi(c)

    { }

    virtual void Input(){

    cout << "請輸入國文成績:";

    cin >> Chi;

    }

    virtual void Print(){

    cout << "國文成績:" << Chi << endl;

    }

    protected:

    int Chi;

    };

    class B: public A{

    public:

    // 我想你應該是要宣告 B::B(), 還有也是一樣盡量使用 member initialization list

    // A(int Chi = 0, int Math = 0):A(Chi)

    // {this->Math= Math;}

    B(int c = 0, int m = 0):

    A(c), Math(m)

    { }

    virtual void Input(){

    A::Input(); // 呼叫 base class 的 method

    cout << "請輸入數學成績:";

    cin >> Math;

    }

    virtual void Print(){

    A::Print(); // 呼叫 base class 的 method

    cout << "數學成績:" << Math << endl;

    }

    protected:

    int Math;

    };

    int main(){

    A *a;

    B b;

    a = &b; // 少一個分號

    // 透過 A *a 來 invoke virtual method.

    // 底下兩行應該要呼叫 B::Input() 與 B::Print()

    a->Input();

    a->Print();

    }

還有問題?馬上發問,尋求解答。