C++中的委托代码
我想了解C++中的委托。我读到“代表团是功能指针”,我看到了几个例子,但不幸的是我不能得到它。我已经创建了代码来尝试,因为我认为可能在编程时我会理解它。不幸的是我没有。C++中的委托代码
#include <iostream> using namespace std;
class person{
private:
int age;
public:
person(age){
this->age = age;
}
// virtual void changeAge(int arg) = 0;
};
class addNumber {
public:
int changeAge(int arg) {
arg += arg+1;
}
};
int main(){
person Olaf;
}
所以在此基础上source我想:
Olaf = &addNumber::changeAge(10);
或
addNumber test; Olaf = &addNumber::changeAge(10);
两个不起作用。这意味着程序不会编译。 想使人对象使用addNumber
类方法的changeName
来改变实例人类的年龄。
回答:
首先,让我们使用一个typedef的功能:
typedef int agechanger(int);
这使得一个新的类型,agechanger
,这将在代码中用于传递左右的功能情况。
现在,你应该给你的person
类正确的构造函数,并妥善包装提供公共getter的age
字段。然后添加一个接受函数作为参数的方法,当然,类型为agechanger
的函数。
class person {
private:
int age;
public:
person(int age){
this->age = age;
}
int getAge() const {
return age;
}
void changeAge(agechanger f)
{
age = f(age);
}
};
然后定义适合我们类型的函数,一个class
内:
class addNumber { public:
static int changeAge(int arg) {
return arg + 1;
}
};
注意,函数被标记为static和返回传入int
递增。
让我们来测试一切都在一个main
:
int main() {
person Olaf(100); //instance of person, the old Olaf
Olaf.changeAge(addNumber::changeAge); //pass the function to the person method
std::cout << Olaf.getAge() << std::endl; //Olaf should be even older, now
}
让我们和使用不同的功能,ouside一类,这一次:
int younger(int age) {
return age -10;
}
int main(){
person Olaf(100);
Olaf.changeAge(younger);
std::cout << Olaf.getAge() << std::endl; // Olaf is much younger now!
}
我希望具有的工作原理是将代码帮助你更好地理解事物。你在这里提出的主题通常被认为是先进的,而我认为你应该先回顾一些更基本的C++主题(例如functions和classes)。
回答:
在C++11,以后你有closures(例如通std::function
等)和lambda expressions(即anonymous functions)
但你不完全具备delegation在C++中,即使你也有pointers到函数和指向成员函数的指针。但封闭和拉姆达表达式在表达能力方面几乎与委托相当。
你应该阅读SICP然后一些很好的C++ programming书来理解这些概念。
以上是 C++中的委托代码 的全部内容, 来源链接: utcz.com/qa/263567.html