好吧,由于某些原因,继承不是按照我认为可行的方式工作,而且它让我很烦恼.假设我有两个班 - BaseMessage而且DerivedMessage.同名命名空间 我这样定义它们messages.hpp:
class BaseMessage
{
public:
BaseMessage();
virtual ~BaseMessage();
protected:
BString<2> _messageType;
};
class DerivedMessage : public BaseMessage
{
public:
DerivedMessage();
virtual ~DerivedMessage();
protected:
BString<2> _informationType;
};
Run Code Online (Sandbox Code Playgroud)
我的想法是,我有多个派生消息,都有唯一的字段(我没有在这里包括),但它们都有消息类型.所以我想我会将messageType粘贴到父类中并使其所有子代都继承它.除了我显然做错了,因为如果我们看一下messages.cpp:
BaseMessage::BaseMessage() { }
BaseMessage::~BaseMessage() { }
/* #TODO: Implement helper functions */
/* *** *** *** *** *** *** *** *** *** *** *** *** */
DerivedMessage::DerivedMessage()
: _messageType("SS")
{
}
DerivedMessage::~DerivedMessage() { }
Run Code Online (Sandbox Code Playgroud)
编译器抛出一个关于"class"full :: namespace :: DerivedMessage'的任何字段都没有名为'_messageType'的字段
唯一的其他线程我发现有点用的是一个地方的问题是在试图从孩子访问父母的保护属性-但我不认为这是我的情况,我想设置DerivedMessage的_messageType,我唯一需要的父母BaseMessage要宣布它.
或者我是不是很糟糕?我只是想,也许我需要使用虚拟属性而不是受保护的属性?
_messageType作为BaseMessage子对象的成员DerivedMessage,需要由BaseMessage构造函数初始化:
class BaseMessage
{
public:
BaseMessage();
BaseMessage(const char* c) : _messageType(c) {} // <--- here
virtual ~BaseMessage();
protected:
BString<2> _messageType;
};
Run Code Online (Sandbox Code Playgroud)
然后,在派生类的构造函数中,编写这样的转发调用:
DerivedMessage::DerivedMessage()
: BaseMessage("SS")
{ }
Run Code Online (Sandbox Code Playgroud)