avatar
讨论一个OO问题# JobHunting - 待字闺中
q*x
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原理吗?
avatar
h*e
2
既然只是名字不一样,应该不需要用继承吧。这个名字只是Message的
一个属性。在Message Class里面只要定义一个类似getMessageName()
的函数就可以了。
avatar
q*x
3
不需要新函数。直接取消纯虚即可。
但问题在于,你怎么限制Message类型只有Buy和Sell两种?如果在ctor里加if-else判
断,增添新的Message类型怎么办?

【在 h****e 的大作中提到】
: 既然只是名字不一样,应该不需要用继承吧。这个名字只是Message的
: 一个属性。在Message Class里面只要定义一个类似getMessageName()
: 的函数就可以了。

avatar
h*e
4
ctor可以用enum啊,这样compiler就可以帮你做检查了。然后提供一个
enum->string的函数。这样以后localization也容易。

【在 q****x 的大作中提到】
: 不需要新函数。直接取消纯虚即可。
: 但问题在于,你怎么限制Message类型只有Buy和Sell两种?如果在ctor里加if-else判
: 断,增添新的Message类型怎么办?

avatar
q*x
5
如果要统计每种Message的调用次数呢?再加N个计数器?

【在 h****e 的大作中提到】
: ctor可以用enum啊,这样compiler就可以帮你做检查了。然后提供一个
: enum->string的函数。这样以后localization也容易。

avatar
h*e
6
是的,可以在你的class里面加上这个:
enum TYPE {BUY, SELL};
static long call_count[SELL+1];

【在 q****x 的大作中提到】
: 如果要统计每种Message的调用次数呢?再加N个计数器?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。