q****x 发帖数: 7404 | 1 struct Message {
virtual ~Message() = 0;
explicit Message(const string name&):name_(name);
void f() { cout << name_ << "order executed" << endl; }
string name_;
};
Message::~Message() {}
struct BuyMessage: public Message {
BuyMessage(): Message("Buy");
};
struct SellMessage: public Message {
SellMessage(): Message("Sell");
};
这里所有数据都可以在Message里处理。Buy和SellMessage的区别就是给name_赋不同的
值。
这种继承符合OO原理吗? |
h****e 发帖数: 928 | 2 既然只是名字不一样,应该不需要用继承吧。这个名字只是Message的
一个属性。在Message Class里面只要定义一个类似getMessageName()
的函数就可以了。 |
q****x 发帖数: 7404 | 3 不需要新函数。直接取消纯虚即可。
但问题在于,你怎么限制Message类型只有Buy和Sell两种?如果在ctor里加if-else判
断,增添新的Message类型怎么办?
【在 h****e 的大作中提到】 : 既然只是名字不一样,应该不需要用继承吧。这个名字只是Message的 : 一个属性。在Message Class里面只要定义一个类似getMessageName() : 的函数就可以了。
|
h****e 发帖数: 928 | 4 ctor可以用enum啊,这样compiler就可以帮你做检查了。然后提供一个
enum->string的函数。这样以后localization也容易。
【在 q****x 的大作中提到】 : 不需要新函数。直接取消纯虚即可。 : 但问题在于,你怎么限制Message类型只有Buy和Sell两种?如果在ctor里加if-else判 : 断,增添新的Message类型怎么办?
|
q****x 发帖数: 7404 | 5 如果要统计每种Message的调用次数呢?再加N个计数器?
【在 h****e 的大作中提到】 : ctor可以用enum啊,这样compiler就可以帮你做检查了。然后提供一个 : enum->string的函数。这样以后localization也容易。
|
h****e 发帖数: 928 | 6 是的,可以在你的class里面加上这个:
enum TYPE {BUY, SELL};
static long call_count[SELL+1];
【在 q****x 的大作中提到】 : 如果要统计每种Message的调用次数呢?再加N个计数器?
|