c++++ 类方法的函数指针在设计模式中至关重要,可用于实现策略模式和观察者模式。在策略模式中,它允许动态更改算法,而观察者模式使用它注册和反注册观察者,为对象提供订阅和接收事件更新的能力。

C++ 类方法的函数指针如何用于设计模式:深入实战
在 C++ 中,类方法的函数指针在实现设计模式时起着至关重要的作用。函数指针是一种指向函数的变量,允许您动态地调用函数。对于几种常见的设计模式,例如策略模式和观察者模式,它们尤为有用。
实战案例:策略模式
立即学习“C++免费学习笔记(深入)”;
策略模式是一种行为设计模式,它允许您动态地更改算法或策略。该模式将算法封装到独立的类中,然后您可以根据需要交换它们。
现代化家居响应式网站模板源码是以cmseasy进行开发的家居网站模板。该软件可免费使用,模板附带测试数据!模板源码特点:整体采用浅色宽屏设计,简洁大气,电脑手机自适应布局,大方美观,功能齐全,值得推荐的一款模板,每个页面精心设计,美观大方,兼容各大浏览器;所有代码经过SEO优化,使网站更利于搜索引擎排名,是您做环保类网站的明确选择。无论是在电脑、平板、手机上都可以访问到排版合适的网站,即便是微信等
0
在 C++ 中,可以使用类方法的函数指针来实现策略模式:
class Context {
public:
void setStrategy(std::function<int(int, int)> strategy) {
this->strategy = strategy;
}
int executeStrategy(int a, int b) {
return this->strategy(a, b);
}
private:
std::function<int(int, int)> strategy;
};
class ConcreteStrategyA {
public:
int operator()(int a, int b) {
return a + b;
}
};
class ConcreteStrategyB {
public:
int operator()(int a, int b) {
return a - b;
}
};
int main() {
Context context;
ConcreteStrategyA strategyA;
context.setStrategy(strategyA);
std::cout << context.executeStrategy(10, 5) << std::endl; // 15
ConcreteStrategyB strategyB;
context.setStrategy(strategyB);
std::cout << context.executeStrategy(10, 5) << std::endl; // 5
return 0;
}在这个示例中,Context 类充当策略模式的上下文,它持有对策略对象的引用。setStrategy() 方法允许您使用函数指针动态地设置策略。
实战案例:观察者模式
观察者模式是一种行为设计模式,它允许对象订阅事件并被通知事件的发生。该模式使用类方法的函数指针注册和反注册观察者。
class Subject {
public:
void addObserver(std::function<void(int)> observer) {
this->observers.push_back(observer);
}
void removeObserver(std::function<void(int)> observer) {
auto it = std::find(this->observers.begin(), this->observers.end(), observer);
if (it != this->observers.end()) {
this->observers.erase(it);
}
}
void notifyObservers(int eventData) {
for (auto& observer : this->observers) {
observer(eventData);
}
}
private:
std::vector<std::function<void(int)>> observers;
};
class ConcreteObserverA {
public:
ConcreteObserverA(int id) : id(id) {}
void update(int eventData) {
std::cout << "Observer " << id << " notified: " << eventData << std::endl;
}
private:
int id;
};
int main() {
Subject subject;
ConcreteObserverA observerA(1);
subject.addObserver(observerA);
ConcreteObserverA observerB(2);
subject.addObserver(observerB);
subject.notifyObservers(10); // "Observer 1 notified: 10"
// "Observer 2 notified: 10"
subject.removeObserver(observerA);
subject.notifyObservers(20); // "Observer 2 notified: 20"
return 0;
}在这个示例中,Subject 类充当事件的来源。它持有观察者的函数指针列表。addObserver() 和 removeObserver() 方法用于添加和删除观察者。当事件发生时,notifyObservers() 方法调用所有观察者的函数指针以通知他们事件的发生。
以上就是C++ 函数的类方法如何用于设计模式?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号