C 分开的抽象类(接口),用于某些通用读取和/或写入访问
C++ separated abstract classes (interface) for some generic read and/or write access or not?
如果需要一些通用读取和/或写入访问,最好以这种方式进行操作?:
class IRead {
public:
virtual int read() const = 0;
};
class IWrite {
public:
virtual void write(int) = 0;
};
class concrete_readonly : public IRead {
public:
virtual int read() const { ... }
};
class concrete_writeonly : public Iwrite {
public:
virtual void write(int i) { ... }
};
class concrete_readwrite : public IRead, public IWrite {
public:
virtual int read() const { ... }
virtual void write(int i) { ... }
};
或最好在派生的混凝土类中使用单个接口和diss允许不良的经过这种方式?:
class IAccess {
public:
virtual int read() const = 0;
virtual void write(int) = 0;
};
class concrete_readonly : public IAccess {
public:
virtual int read() const { ... }
virtual void write(int i) { assert(0); }
};
class concrete_writeonly : public IAccess {
public:
virtual int read() const { assert(0); return 0; }
virtual void write(int i) { ... }
};
class concrete_readwrite : public IAccess {
public:
virtual int read() const { ... }
virtual void write(int i) { ... }
};
或可以做其他事情?
第一种方法是更好的,因为Liskov替代原则。提供读写但实际上不能保证这两个基本上工作的基础课程基本上都是没有用的。提供保证功能的两个基础类更有用。
另一方面,请谨慎行事,因为虽然很容易认为阅读和写作可以简洁地抽象,但通常不是这样。例如,使用网络插座的阅读和写作需要额外的状态来处理异步操作。从UDP读取数据报的语义与TCP的数据包不同,等等。
可能是我要说的前身,原因是;如果这是一个具体的Readonly类,为什么编译器应该在其上执行Write(...)方法?
这个问题可能比阅读/写入访问更一般,但是由于不清楚,我会总结一些我完全建议它的原因:
- C 已经有const
- 仅写的几乎没有用(硬件访问?)
- 您至少需要模板(仅读/写入ints?),并且可能变得复杂
- 没有功能增益
- 您强迫类具有虚拟函数(和虚拟破坏者),而无需用于多态性。
- 只能在需要时使用Getters/Setters,最好只能做某事
对不起,这只是建议。
相关文章:
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 读取访问冲突.这0xCDCDCDCD
- 尝试通过共享指针使用变量时读取访问冲突
- C++ 读取访问冲突,0xCDCDCDCD
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 使用智能指针读取访问冲突
- 引发异常:读取访问冲突.**此**0x40错误
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- Visual Studio图形调试器引发读取访问冲突异常
- C++中的内存分配(引发异常:读取访问冲突)
- 引发异常:读取访问冲突 [C++]
- 尝试从单向链表C++中删除单个节点时出现读取访问冲突
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 错误 : 异常 : 引发未处理的异常: 读取访问冲突.0xDDDDDDDD临时温度
- 读取访问冲突. _Mycont 在 C++ 中将 udp 数据放入向量时出现 nullptr 错误
- 读取访问冲突0xCDCDCDCD
- Vector::p ush_back() 给出读取访问冲突
- 访问共享内存时出现读取访问冲突
- 挂钩创建文件抛出异常:读取访问冲突
- 在字符串驱动器中读取访问违规