【问题标题】:Is there a way to add code on a function from another Class without inheritance?有没有办法在没有继承的情况下从另一个类的函数中添加代码?
【发布时间】: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

【问题讨论】:

  • 即使有继承,也不可能在另一个类的函数上添加代码。
  • 你的设计有缺陷。 class1class2 有关系或没有关系。 (你必须做出一个/或的决定。)如果class2class1的内部状态有影响,class2应该有一个指向class1的指针或引用,而class1应该有一个内部状态状态(例如 int 成员变量),可以从外部修改。 (在极端情况下,它可能是 protectedprivateclass2friend。)
  • “与1级没有任何关系。” - 不,您至少需要一个关联,例如装饰器模式。
  • 您在寻找decorator pattern 吗?
  • @Scheff'sCat 如果 class2 有一个指针呢?

标签: c++


【解决方案1】:

您需要一个对象来调用非静态成员函数。

如果您想从 class2::foo 获得所需的输出,您可以像这样实现它:

class class2 {
public:
    void foo() 
    {
       class1 x;
       x.foo();
       cout << "Jump from a cliff" << endl;
    }

};

或者 class1 可以有一个类型为 class1 的成员。

【讨论】:

  • 不,不会的。认为 foo() 函数就像一个广播,在广播之前我想修改它以广播其他东西。
猜你喜欢
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2011-01-14
  • 2015-05-01
相关资源
最近更新 更多