假设有一个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
。
我的问题是如何设计这样的读写类以避免代码重复?
我无法继承ReadFd
和WriteFd
,因为显然我只需要一个file_descriptor_
。我遇到的真实情况有点复杂,但这里的概念反映了它相当接近。
答案 0 :(得分:7)
添加第三个类,基于ReadFd
和WriteFd
,其唯一目的是包含描述符变量(可能还包括读写共享的其他内容)。
答案 1 :(得分:2)
创建一个名为class Fd
的新基类,其中包含文件描述符。 class ReadFd
& WriteFd
可以通过is-a
关系继承它。您的ReadWriteFd
可以继承这两个类。请记住,您必须解决diamond multiple inheritance problem。
以下是一个示例UML:
答案 2 :(得分:1)
作为OO Principals州:
封装各种不同的内容。 - 可以改为“确定您的应用程序的各个方面,并将它们与保持不变的方式分开。”对于那些不会改变的方面,我们将它们保留原样。当然,我们不能只丢掉那些不同的部分;前者仍然需要与他们互动才能使系统发挥作用 在您的特定情况下,您可以创建具有公共数据和接口的基类。