我有一些代碼正在嘗試開始作業,我愿意接受有關如何執行此操作的其他建議。基本上,我有一些我想要一堆子類繼承的基類。然后我有一個函式需要呼叫這個方法的子類版本。
#include <iostream>
using namespace std;
//my base class
class BaseClass {
public:
void myMethod(){
std::cout << "Base class?" << std::endl;
}
};
/my subclass
class SubClass1: public BaseClass{
public:
void myMethod(){
std::cout << "Subclass?" << std::endl;
}
};
//method that I want to call SubClass.myMethod(). I cannot declare this as
//SubClass1 because there will be multiple of these.
void call_method(BaseClass object){
return object.myMethod();
}
int main()
{
BaseClass bc;
SubClass1 sb1;
//works how I expect it to
sb1.myMethod();
//I want this to also print "Subclass?"
//but it prints "Base class?".
call_method(sb1);
return 0;
}
謝謝你的幫助
uj5u.com熱心網友回復:
您需要將基類中的成員函式宣告為虛擬。例如
virtual void myMethod() const {
std::cout << "Base class?" << std::endl;
}
并在派生類中重寫它
void myMethod() const override {
std::cout << "Subclass?" << std::endl;
}
并且函式call_method必須有一個引數表示對基類物件的參考
void call_method( const BaseClass &object){
object.myMethod();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/487137.html
上一篇:讓用戶在日期前30天(含)注冊
