【发布时间】:2012-02-14 05:58:37
【问题描述】:
我有一个包含很多类的库。我想修改某个类的一个虚拟方法的行为。我试图简化,我所拥有的,这里是:
#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 类型?
【问题讨论】:
-
检查演员表,也许动态演员表会有所帮助