1
如果我創建基類指針數組,請在作用域中創建派生類對象,並將引用傳遞給數組,並在派生類中調用派生類的虛函數範圍正確但超出範圍,我嘗試調用虛函數,它忘記它是派生類。我試圖鑄造它,但它不起作用。指向派生類的基類指針,範圍之外
class Base{
public:
Base(string str) {name = str;}
virtual string toString() { return name;}
Base& operator=(const Base& b) {name = b.name; return *this;}
private:
string name;
};
class Derived: public Base{
public:
Derived(string str1, string str2) {name = str1; second = str2;}
virtual string toString() {return name + second;}
Derived& operator=(const Derived& d) {Base::operator=(d);
second = d.second; return *this;}
private:
string name;
string second;
};
int main(){
Base* baseArr[5];
int n;
cin >> n;
if(n==1){
Derived der("Derived", "Class");
baseArr[0] = &der;
baseArr[0]->toString() << endl; //this prints out "DerivedClass"
}
cout << baseArr[0]->toString(); //this prints out "Derived"
}
有沒有辦法在範圍之外調用派生類的函數?
那麼,有沒有什麼辦法可以保存der過去的? –
當然,將它的聲明移到'if(...){'範圍外,那麼它的生命週期將延伸到'main()'中的最後'}'。 –
但是,我需要如果聲明我的實際代碼。因爲我試圖創建2個不同的派生類。如果條件爲真,則爲Derived1;如果爲false,則爲Derived2,兩者都從Base繼承。 –