gpt4 book ai didi

C++ 继承 protected 成员

转载 作者:太空狗 更新时间:2023-10-29 23:36:02 26 4
gpt4 key购买 nike

好吧,由于某种原因,继承并没有像我想象的那样工作,这让我非常烦恼。假设我有两个类 - BaseMessageDerivedMessage。相同的命名空间。我在 messages.hpp 中这样定义它们:

class BaseMessage
{
public:
BaseMessage();
virtual ~BaseMessage();

protected:
BString<2> _messageType;
};

class DerivedMessage : public BaseMessage
{
public:
DerivedMessage();
virtual ~DerivedMessage();

protected:
BString<2> _informationType;
};

我的想法是,我有多个派生消息,所有消息都具有唯一字段(我没有在此处包含),但它们都有一个消息类型。所以我想我会将 messageType 粘贴到父类中并让其所有子类继承它。除了我显然做错了,因为如果我们查看 messages.cpp:

BaseMessage::BaseMessage() { }

BaseMessage::~BaseMessage() { }

/* #TODO: Implement helper functions */

/* *** *** *** *** *** *** *** *** *** *** *** *** */

DerivedMessage::DerivedMessage()
: _messageType("SS")
{

}

DerivedMessage::~DerivedMessage() { }

编译器抛出一个关于“class ‘full::namespace::DerivedMessage’ does not have any field named ‘_messageType’”的问题

我发现唯一有用的另一个线程是在尝试从子进程访问父进程的 protected 属性时出现问题 - 但我不认为这是我的情况,我正在尝试设置 DerivedMessage_messageType,我唯一需要父 BaseMessage 的就是声明它。

还是我做得不好?我只是想,也许我需要使用虚拟属性而不是 protected 属性?

最佳答案

_messageType,作为DerivedMessageBaseMessage子对象的成员,需要通过BaseMessage的初始化构造函数:

class BaseMessage
{
public:
BaseMessage();
BaseMessage(const char* c) : _messageType(c) {} // <--- here
virtual ~BaseMessage();

protected:
BString<2> _messageType;
};

然后,在派生类的构造函数中,编写如下转发调用:

DerivedMessage::DerivedMessage()
: BaseMessage("SS")
{ }

关于C++ 继承 protected 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com