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 Novirtual
,除非您希望能够重写子类中的函数(在本例中这是一个坏主意)。@Someprogrammerdude,我真的很抱歉,但我不能100%相信我理解您的意思是正确的。您是否建议我应该让类基址{受保护:int文件{u描述符}
和类ReadFd:public Base{}
,类WriteFd:public Base{}
?那么我应该如何组织类ReadWriteFd
。我只想有一个描述符,我可以读/写/到?