【发布时间】:2020-07-29 17:42:41
【问题描述】:
我一直在学习设计模式,在我的策略设计模式的实现中,我发现我不能像这样在类定义中声明继承:
class Context
{
private:
Strategy *strategy_;
public:
Context(Strategy* strategy) : strategy_(strategy); // This line
~Context();
void set_strategy(Strategy* strategy);
void DoStuff() const;
};
通过将默认构造函数更改为在我的类定义中工作正常
Context(Strategy* strategy=nullptr) : strategy_(strategy){}
或者通过从定义中删除继承并像这样在类之外定义它。
class Context
{
private:
Strategy *strategy_;
public:
Context(Strategy* strategy); // This line
~Context();
void set_strategy(Strategy* strategy);
void DoStuff() const;
};
Context::Context(Strategy *strategy=nullptr) : strategy_(strategy){} // and this line
我很好奇为什么不能在类定义的默认构造函数中声明继承。
【问题讨论】:
-
您不能在构造函数中编写继承。你写的是member initialization list。
-
我在您的代码中没有看到任何与继承有关的内容?
-
不确定这是否是切线,但像
m_strategy这样的东西可以让您和 IDE/编辑器更轻松地从列表中挑选成员。 -
这是一个运算符重载的例子,有没有办法使用':'进行继承?很抱歉造成混乱。
-
@ClockworkKettle :在这两种情况下都不是运算符。这只是语法的一部分。
标签: c++ inheritance constructor