【发布时间】:2022-11-16 01:31:44
【问题描述】:
假设我们有一个类,它的函数 foo() 计数为 3,并且我们希望另一个类能够修改此函数,并且在修改后它计数为 3,这也是先前声明的,但也执行新代码。函数 foo() 只会被 class1 调用,我不想使用继承。我应该添加的新代码可以说它与class1没有任何关系。
例如:
#include <iostream>
using namespace std;
class class1 {
public:
class1()
{
}
void foo()
{
for(int i =0;i<2;i++)
{cout << i << endl;}
}
};
class class2 {
public:
class2()
{
}
void foo() override
{
Super::foo();
cout << "Jump from a cliff" << endl;
}
};
int main()
{
class1 c1 = class1();
class2 c2 = class2();
c1.foo();
return 0;
}
结果:
0
1
2
Jump From a cliff
【问题讨论】:
-
即使有继承,也不可能在另一个类的函数上添加代码。
-
你的设计有缺陷。
class1和class2有关系或没有关系。 (你必须做出一个/或的决定。)如果class2对class1的内部状态有影响,class2应该有一个指向class1的指针或引用,而class1应该有一个内部状态状态(例如int成员变量),可以从外部修改。 (在极端情况下,它可能是protected或private和class2和friend。) -
“与1级没有任何关系。” - 不,您至少需要一个关联,例如装饰器模式。
-
您在寻找decorator pattern 吗?
-
@Scheff'sCat 如果 class2 有一个指针呢?
标签: c++