C ++继承设计:避免成员重复

时间:2018-04-27 06:38:14

标签: c++ inheritance

假设有一个C++类,它们分别支持文件描述符的只读和只写操作。

class ReadFd {
 public:
  ssize_t read( /* */ ) {
    // read from file_descriptor_
  }
 protected:
  int file_descriptor_;
};

class WriteFd {
 public:
  ssize_t write(/* */) {
    // write to file_descriptor_
  }
 protected:
  int file_descriptor_;
};

现在假设有人想要定义一个支持读写操作的类ReadWriteFd

我的问题是如何设计这样的读写类以避免代码重复?

我无法继承ReadFdWriteFd,因为显然我只需要一个file_descriptor_。我遇到的真实情况有点复杂,但这里的概念反映了它相当接近。

3 个答案:

答案 0 :(得分:7)

添加第三个类,基于ReadFdWriteFd,其唯一目的是包含描述符变量(可能还包括读写共享的其他内容)。

答案 1 :(得分:2)

创建一个名为class Fd的新基类,其中包含文件描述符。 class ReadFd& WriteFd可以通过is-a关系继承它。您的ReadWriteFd可以继承这两个类。请记住,您必须解决diamond multiple inheritance problem

以下是一个示例UML:

enter image description here

答案 2 :(得分:1)

作为OO Principals州:

封装各种不同的内容。 - 可以改为“确定您的应用程序的各个方面,并将它们与保持不变的方式分开。”对于那些不会改变的方面,我们将它们保留原样。当然,我们不能只丢掉那些不同的部分;前者仍然需要与他们互动才能使系统发挥作用 在您的特定情况下,您可以创建具有公共数据和接口的基类。