我想知道是否可以重寫一個類中的一個函數而不創建一個全新的類。C++重寫由子類創建的對象的函數
我想bObj1.foo();
輸出「foo!」和bObj2.foo()
輸出「foo?」,但目前他們都輸出「foo!」。
#include <iostream>
using namespace std;
class B {
public:
virtual void foo() { cout << "foo!" << endl; }
};
class A {
public:
B f();
};
B A::f() {
B bObj;
return bObj;
}
class C : public A {
};
int main()
{
A aObj;
B bObj1 = aObj.f();
bObj1.foo(); // "foo!"
C cObj;
B bObj2 = cObj.f();
bObj2.foo(); // "foo?"
}
你想用它的虛擬功能之一的自定義替代返回一個對象?這對於虛擬功能來說並不是真的可能 - 它正在進入功能對象領域。你能舉一個你如何使用這個例子嗎?在你的例子中,單詞「foo?」不存在。 – Ayjay
是的。我想返回一個'B',它的'foo()'被覆蓋。 – Jeremiah
原因是'A ::'確實是一個鏈表,'B ::'確實是一個迭代器。我將'A ::'繼承到'C ::',並希望'C ::'具有不同的迭代器行爲。我堅持這種設計。 – Jeremiah