我有一個類庫很多。我想修改某個類的一個虛擬方法的行爲。我試圖簡化,我有什麼,那就是:在C++中重載虛擬方法
#include <iostream>
using namespace std;
class B;
class A {
public:
A(B& b_) : b(b_) {};
B& b;
virtual void printon() {
cout << "Test virtual printon A\n" << endl;
}
void print() {
cout << "Test print A\n";
printon();
}
};
class B {
protected:
A a;
public:
B() : a(*this) {};
void print() {
a.print();
};
};
而在我的節目,我可以用它喜歡:
int main() {
B* b = new B();
b->print();
return 0;
}
其實方法a.printon()
從一些其他的代碼調用,不同的條件,並不打印任何東西(它做了一些其他的行爲)。我需要重寫此方法來執行其他操作,例如,打印「test2」。
我可以創建一個派生類newA
:
class newA : public A {
public:
newA(B& b_) : A(b_) {};
virtual void printon() {
cout << "Test printon newA"<< endl;
}
};
而且我不知道,下一步怎麼辦。也許創建一個類newB
,如:
class newB : public B {
public:
newB() : B() {};
};
但如何讓類型A
行爲B.a
像newA
類型?
退房鑄造,說不定動態轉換可以幫助 – 2012-02-14 08:37:55