处理组合关系中的变量
Handling variables in composition relationships
我目前正在重新设计一个c++项目,当具有"有一个"(组合)关系的类需要访问可能属于父类的变量时,我想知道应该如何处理变量,例如:
计算机对象有一个网卡对象。计算机对象有一个所有者变量。例如
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;
}
假设我在网卡中有一个函数需要所有者。当我在计算机中初始化时,是否最好将所有者作为网卡的成员变量传递,或者我是否应该在NetworkCard中有一个父指针,可以访问计算机的成员变量,Getter/Setter或其他关系?我知道这是相当普遍的做法,有一个指针到父在子,但这是一个好主意/适当的OOP?
**电脑的事情只是例如,IRL它是别的东西,所以不要太挂在它:)。
我看到您认识到尽量减少不必要的耦合是可取的。为此,可以将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"关系,在这种情况下继承可能是一个更好的工具。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 指针 与局部变量的关系
- 使用C 中的链接seam break static变量依赖关系
- 变量之间的关系
- 原子线程围栏:为什么在这个非原子变量上存在数据竞争?这有关系吗
- 将C++ argv[] 解释为变量与 CERN 根之间的关系
- 物理寄存器和英特尔SIMD变量之间的关系
- Visual Studio 中C++代码的变量依赖关系图
- 逗号分隔变量定义中关系前的序列
- 变量初始化的时间有关系吗
- 如何正确修复对全局变量的循环依赖关系
- 父子关系设置为Qt中的成员变量
- 处理组合关系中的变量
- 'for loop'中变量的关系
- 什么是寄存器缓存,它与const变量有什么关系