首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理组合关系中的变量

处理组合关系中的变量
EN

Stack Overflow用户
提问于 2013-05-04 03:53:45
回答 1查看 994关注 0票数 3

我目前正在重新设计一个C++项目,我想要一些关于当具有“具有”(组合)关系的类需要访问有争议地属于父类的变量时,应该如何处理变量的一些意见,例如:

计算机对象具有网卡对象。computer对象有一个所有者变量。例如

代码语言:javascript
复制
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它是其他的东西,所以不要太在意它:)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-04 05:16:56

我知道您认识到最大限度地减少不必要的耦合是可取的。为此,您可以将NetworkCard类设计为不知道父类的实现细节。以下是在网络构建时将名称传递给广播的一种方法:

代码语言:javascript
复制
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“关系,在这种情况下,继承可能是更好的工具。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16366559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档