【发布时间】:2023-09-22 18:12:02
【问题描述】:
下图是程序的大致结构。
class Room
{
private:
Node* content;
public:
void someRoomMethod();
};
void Room::someRoomMethod() {}
class Node
{
private:
Node* nextNode;
std::variant<int, float> data;
public:
void someNodeMethod();
};
void Node::someNodeMethod() {}
正如我在标题中提到的那样,Node 除了在Room 内部之外,没有在任何地方使用。我尝试通过将 Node 设为嵌套类来封装它,但它不起作用。
// Room.hh
class Room
{
private:
Room::Node* content; // ERROR: no type named "Node" in "Room" -- GCC
public:
void roomMethod();
class Node()
{
private:
Node* nextNode;
std::variant<int, float> data;
public:
void someNodeMethod();
}
};
// Room.cpp
void Room::someRoomMethod() {} // sees Room in Room.hh
// Node.cpp
void Room::Node::someNodeMethod() {} // sees Node in Room.hh
问题:
-
我究竟应该如何封装
Node,以便我可以在Room中创建一个Node类型的变量,这样Node就不能在除Room之外的任何地方使用。请注意,我需要在每个实例Room内创建一个Node类型的链接列表。 -
应该像现在这样将
Node的方法移到外部.cpp 文件中吗?这是一个好习惯吗?
【问题讨论】:
标签: c++ oop inner-classes encapsulation