我想知道是否有可能像在JavaScript中那样重写C++中对象的方法。 (虽然在“搜索”中我什么也没找到)

那是,

Javascript:

function Test(){
   this.doStuff = function(){
      console.log('Original');
   }
}

var obj = new Test();
obj.doStuff(); //"original"
obj.doStuff = function(){
   console.log('overrided');
};
obj.doStuff(); //"overrided"

C++:
class Test{
   public:
      void doStuff(){
         std::cout << "original" << std::endl;
      }
}

int main(){
   Test obj;
   obj.doStuff(); //"original"
   /*obj.doStuff ...???? */
}

是否可以在C++中执行类似的操作?

最佳答案

是的,有可能,但是不是以等效的方式,而是通过使用C++ 11函数对象:

#include <functional>
#include <iostream>

void originalDoStuff(){
  std::cout << "original" << std::endl;
}

class Test{
public:
  std::function<void()> doStuff;

  Test():doStuff(originalDoStuff) {}
};

int main() {
  Test t;
  t.doStuff();

  t.doStuff = []() { std::cout << "new stuff" << std::endl; };
  t.doStuff();
}

关于javascript - 是否像Javascript对象的方法那样覆盖C++对象的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27544660/

10-16 14:37