c - 在 c 中实现一个基本的策略模式
问题描述
我正在尝试实施一个基本的战略模式来理解。我是编程新手。我在下面的代码中做错了什么。
有人可以给出策略模式的基本c实现吗?提前谢谢
#include <stdio.h>
#include <stdlib.h>
typedef int (*CustomerPriceStrategy)(int);
int bronzePriceStrategy(int);
int silverPriceStrategy(int);
int goldPriceStrategy(int);
struct Customer
{
const char* name;
CustomerPriceStrategy priceStrategy;
};
void placeOrder(struct Customer* customer)
{
int a;
a=customer->priceStrategy(3);
printf("%d",a);
}
int main(void) {
struct Customer *customer;
customer->name="bronze";
customer->priceStrategy=&bronzePriceStrategy;
placeOrder(customer);
return EXIT_SUCCESS;
}
int bronzePriceStrategy(int a)
{
printf(" 40+ shipping");
return (a+40);
}
int silverPriceStrategy(int a)
{
printf(" 25+ shipping");
return (a+25);
}
int goldPriceStrategy(int a)
{
/* Free shipping for gold customers. */
printf(" no shipping fee");
return a;
}
解决方案
struct Customer *customer;
是一个未初始化的指针,所以:
customer->name="bronze";
customer->priceStrategy=&bronzePriceStrategy;
将调用未定义的行为。
您可以通过以下方式替换它:
struct Customer customer;
customer.name="bronze";
customer.priceStrategy=&bronzePriceStrategy;
placeOrder(&customer);
推荐阅读
- postgresql - Postgres如何从外部服务器传输所有枚举
- amazon-web-services - 如何使用缓存的 boto3 客户端和 Lambda 预置并发刷新凭证?
- javascript - 有没有办法使用 vanilla JavaScript 获取倾斜元素的外部高度?
- typescript - 如何创建嵌套的 TS 类型?
- javascript - “元素”类型上不存在属性“样式”
- python - 通过 Rpy2 语法问题在 python 中使用 R 包
- azure - Azure Front Door + Azure Traffic Manager 在 azure 中可用
- python - 如何从包含单个 Dict 列表的系列中创建 DataFrame
- docker - 在本地运行 localstack 和 lambda 进行测试
- mysql - Mysql 查询具有非默认 DATE 字段的列