处理组合关系中的变量

时间:2013-05-03 19:53:45

标签: c++ oop composition

我目前正在重新设计一个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它是别的东西所以不要太挂它了:)。

1 个答案:

答案 0 :(得分:3)

我看到你认识到最好尽量减少不必要的耦合。为此,您可以将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”关系,在这种情况下,继承可能是一个更好的工具。