【问题标题】:How can I overload a member function from an instance of a class如何从类的实例中重载成员函数
【发布时间】:2017-09-22 06:18:42
【问题描述】:

我想创建一个类,其中有一个自动调用的函数,以处理存储在该类实例中的信息。

但是,每个实例都有不同的值,并且可能以不同的方式处理该内容。

因此,我需要类似于构造函数重载但在成员函数中的东西。每个实例都可以重载默认函数或让默认函数处理输入。

如何实现?

【问题讨论】:

  • 你不能把那个函数作为参数传递给构造函数吗? std::function 救援!
  • @Bathsheba 我不必将其作为参数传递
  • 我知道你不知道。但你可能想要

标签: c++ polymorphism overloading


【解决方案1】:

尝试使用 if else 条件调用构造函数中的函数 喜欢:

class abc{
 abc(){
         if username == "member 1"
             functioncall();
         else
             functioncall();
 }

}

【讨论】:

    【解决方案2】:

    据我所知,您需要一些虚拟构造仿真。有一种简单的 C/C++ 方法可以做到这一点。

        // Example program
    #include <iostream>
    #include <string>
    
    struct A; 
    typedef void (*cb)(A*);
    
    
    struct A
    {
        int m_a;
    
        static void foo(A* aref)
        {
           std::cout << "Print a: " <<  aref->m_a << "\n";   
        }
    
    
        A(cb b=foo)
        {
            m_a = 100;
            b(this);
        }
    };
    
    int main()
    {
        A a;
    
    }
    

    虽然不是很清楚,但还是可以的。

    【讨论】:

      【解决方案3】:

      通过为变量行为创建一个单独的类Callable描述了与函数相关的本地数据,并且作为一个类,可以被派生。

      class Callable {
      public:
          int m_Value;
          Callable(int value) : m_Value(value)
          {
      
          }
          void operator()( int val1, double val2 /* whatever makes sense */ ) {
      
          }
      };
      

      使用函数运算符void operator()( ...... ),我们创建了一种使 Callable 类型的变量看起来像函数的方法。

      class Variable {
      public:
          Callable myFunction;
          Variable(const Callable & howToCall, /* some more stuff */) :
              myFunction(howToCall)
          { /* stuff */
          }
          void aFunction(int data, double value ) {
              myFunction( data,  value);
          }
      };
      

      当调用aFunction 时,会调用myFunction 的当前值。

      终于Variable可以通过修改myFunction的值来改变它调用的函数......

       myFunction = Callable( /* new parameters */ );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        相关资源
        最近更新 更多