我目前正在重新设计一个C++项目,我想要一些关于当具有“具有”(组合)关系的类需要访问有争议地属于父类的变量时,应该如何处理变量的一些意见,例如:
计算机对象具有网卡对象。computer对象有一个所有者变量。例如
class Computer {
string get_owner(); // getter as an option?
private:
std::string owner = "baylesj";
NetworkCard nic;
}
class NetworkCard {
public:
NetworkCard(Computer *parent);
send_packet();
broadcast_owner(send_packet(m_parent->owner)); // this is kind of ugly
private:
Computer *m_parent;
}假设我在网卡中有一个需要所有者的函数。当我在Computer中初始化时,最好将所有者作为网卡的成员变量传入,还是应该在NetworkCard中有一个父指针,它可以访问Computer的成员变量、Getter/Setter或其他关系?我知道在孩子中有一个指向父母的指针是相当普遍的做法,但是这是一个好主意/合适的OOP吗?
**计算机的事情只是一个例子,IRL它是其他的东西,所以不要太在意它:)。
发布于 2013-05-04 05:16:56
我知道您认识到最大限度地减少不必要的耦合是可取的。为此,您可以将NetworkCard类设计为不知道父类的实现细节。以下是在网络构建时将名称传递给广播的一种方法:
class Computer {
public:
Computer(std::string const &owner) : m_Owner(owner), nic(owner)
{
}
private:
std::string m_Owner;
NetworkCard nic;
};
class NetworkCard {
public:
NetworkCard(std::string const &owner)
{
broadcast_owner(owner);
}
send_packet();
broadcast_owner(std::string const &owner);
private:
};如果您发现有太多这样的变量可以作为构造函数参数传递(我喜欢不超过两三个),那么您可能会发现组合不是解决问题的错误工具。通常,参数的数量很少,除非它实际上是" is -a“关系,在这种情况下,继承可能是更好的工具。
https://stackoverflow.com/questions/16366559
复制相似问题