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 710 年前最佳解答
#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();
}