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

C++ C++;继承设计:避免成员重复,c++,inheritance,C++,Inheritance,让我们假设其中一个有两个C++类,分别支持文件描述符上的只读和只读操作 class ReadFd{ 公众: ssize\u t read(/**/){ //从文件描述符读取_ } 受保护的: int文件\u描述符\u; }; 类WriteFd{ 公众: ssize_t write(/**/){ //写入文件描述符_ } 受保护的: int文件\u描述符\u; }; 现在假设要定义一个同时支持读写操作的类ReadWriteFd 我的问题是如何设计这样的读写类以避免代码重复 我不能同时从ReadF

让我们假设其中一个有两个
C++
类,分别支持文件描述符上的只读和只读操作

class ReadFd{
公众:
ssize\u t read(/**/){
//从文件描述符读取_
}
受保护的:
int文件\u描述符\u;
};
类WriteFd{
公众:
ssize_t write(/**/){
//写入文件描述符_
}
受保护的:
int文件\u描述符\u;
};
现在假设要定义一个同时支持读写操作的类
ReadWriteFd

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


我不能同时从
ReadFd
WriteFd
继承,因为显然我只需要一个
文件描述符。我遇到的实际情况有点复杂,但这里的概念反映得相当接近。

添加第三个类,以
ReadFd
WriteFd
为基础,其唯一目的是包含描述符变量(以及读写共同的其他东西).

创建一个名为
class Fd
的新基类,其中包含文件描述符
class ReadFd
WriteFd
都可以通过
is-a
关系从中继承。您的
ReadWriteFd
可以从这两个类继承。记住,你必须解决这个问题

以下是一个UML示例:

作为状态:

封装变化的内容可以重新表述为“识别应用程序中不同的方面,并将它们与保持不变的方面区分开来”。对于那些不变的方面,我们保持原样。当然,我们不能仅仅扔掉那些变化的部分;前者仍然需要与它们交互,以便系统工作。

在您的特定情况下,您可以创建一个具有公共数据和接口的基类。

具有基类实现的虚拟方法(类似于
return 0
)可以进行读写吗?这是件好事吗?我也有同样的问题。我们可以避免虚拟通话吗?请您详细说明一下好吗?@TruLa No
virtual
,除非您希望能够重写子类中的函数(在本例中这是一个坏主意)。@Someprogrammerdude,我真的很抱歉,但我不能100%相信我理解您的意思是正确的。您是否建议我应该让
类基址{受保护:int文件{u描述符}
类ReadFd:public Base{}
类WriteFd:public Base{}
?那么我应该如何组织
类ReadWriteFd
。我只想有一个描述符,我可以读/写/到?