我想知道是否有可能像在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/