如何要求基类和派生类来实现虚函数
How do you require a base and a derived class to implement a virtual function?
我正在序列化我的类层次结构,并且我想要求它们都实现一个序列化函数。
class Base
{
virtual void serialize(File file)
{
file << _baseMember;
}
int _baseMember;
}
class Derived : public Base
{
virtual void serialize(File file)
{
Base::serialize(file);
file << _derivedMember;
}
int _derivedMember;
}
如果我总是记得在派生类中实现序列化函数,那么一切都很好,但这段代码不需要定义Derived::serialize()
。
我的下一个想法是创建一个接口来要求实现serialize
:
class Serializable
{
virtual void serialize(File file) = 0;
}
class Base : public Serializable { ... }
class Derived : public Base : public Serializable { ... }
但是在这创建了编译器警告warning: direct base 'Serializable' inaccessible in 'Derived' due to ambiguity
。这让我觉得我的设计出了问题。
要求属于同一继承链的两个类实现特定的虚函数的正确方法是什么?
在我看来,第一个版本是正确的设计。从语义上讲,当Base是序列化的时候,为什么派生的不能序列化?即使派生不提供自己的实现?它仍然是可串行化的
一个解决方法可能是这样做:
class Base {
virtual void serialize() {
file << _baseMember;
subSerialize();
}
virtual void subSerialize() = 0;
};
class Derived : public Base {
virtual void subSerialize() {
file << _derivedMember;
}
};
相关文章:
- 在命名空间内部还是外部实现 c++ 函数?
- 如何在C++中实现函数(f)(x)(y, z)(g)(r)
- 如何在C++中实现函数上的二叉搜索?
- 键按下事件错误 Qt 实现函数时
- 在子类之外实现函数导致未知错误
- 通过模板滥用实现函数式C++
- C++,实现函数"int next(std::string param)"时出现奇怪的编译器错误
- 我正在尝试创建自己的 strcat() 函数,而不是使用库实现函数<cstring>
- 如果未实现函数,则在链接时启用错误
- 用函数参数实现c++函数指针
- 如何在Android SDK中调用和实现C++函数
- 在 C++ RCPP 中实现 R 函数
- 实现函数模板填充多维对象
- 类的层次结构,试图在基本级别实现函数
- 用c++实现函数对象的自动检测类型
- 用shared_ptrs实现函数模板的C++实例化
- 在类中实现函数导致错误:成员引用基类型'ifstream (string)'不是结构或联合
- 用c++实现S函数.生成错误
- 引用可以用于实现函数重写吗
- 如何在c++中实现函数超时