3

我目前正在重新设计一个 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;
}

假设我在网卡中有一个需要所有者的功能。当我在 Computer 中初始化时,将所有者作为网卡的成员变量传递是否更好,或者我应该在 NetworkCard 中有一个可以访问 Computer 成员变量、Getter/Setter 或其他关系的父指针?我知道在孩子中有一个指向父母的指针是相当普遍的做法,但这是一个好主意/正确的 OOP 吗?

**计算机的东西只是例如,IRL 它是其他东西所以不要太挂在它上面:)。

4

1 回答 1

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”关系,在这种情况下继承可能是一个更好的工具。

于 2013-05-03T21:16:55.800 回答