我用两个函数read()和write()来序列化我的大多数类.我想要做的是从子类调用基类的read/write()函数,这样我就不必多次重复序列化代码了.
例如:
class Base
{
public:
base();
virtual read(QDataStream&);
virtual write(QDataStream&);
private:
int a, b, c, d;
}
class Sub : public Base
{
public:
Sub();
read(QDataStream&);
write(QDataStream&);
private:
int e, f, g, h;
}
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,我希望代码读/写a,b,c,d来自Base.然后,Sub将调用Base :: read(QDataStream&),然后添加Sub独有的任何属性.这样我就不必为每个子类重复序列化代码(并且可能忘记这样做).
Ryc*_*cul 18
您可以通过在函数调用前加上基类标识符,然后是作用域运算符(::)来调用基类函数.
像这样:
class Base
{
public:
virtual void Function();
}
class Foo : public Base
{
public:
void Function();
void DoSomething();
}
void Foo::DoSomething()
{
Base::Function(); // Will call the base class' version of Function().
Function(); // Will call Foo's version of Function().
}
Run Code Online (Sandbox Code Playgroud)
编辑:注意请求删除.
void Sub::read(QDataStream &stream)
{
Base::read(stream);
// do Sub stuff here
}
Run Code Online (Sandbox Code Playgroud)
首先 - 您的成员函数没有返回类型 - 在C++中无效,您的编译器可能会抱怨'default int'行为并让它通过,但您应该给它们返回类型(我将void用作占位符).
当您在子类中时,可以范围解析并使用父类版本:
void Sub::read(QDataStream& qds) {
Base::read(qds);
// do more stuff
}
Run Code Online (Sandbox Code Playgroud)