如何在C ++中重写后调用原始函数?

时间:2011-07-05 19:01:44

标签: c++ qt override

我使用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;
}

所以在这个例子中,我希望代码读取/写入a,b,c,d来自Base。然后,Sub将调用Base :: read(QDataStream&),然后添加Sub独有的任何属性。这样我就不必为每个子类重复序列化代码(并且可能忘记这样做)。

3 个答案:

答案 0 :(得分: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().
}

编辑:请求删除注释。

答案 1 :(得分:9)

void Sub::read(QDataStream &stream)
{
    Base::read(stream);
    // do Sub stuff here
}

答案 2 :(得分:6)

首先 - 您的成员函数没有返回类型 - 在C ++中无效,您的编译器可能会抱怨'default int'行为并让它通过,但您应该给它们返回类型(我将使用{{ 1}}作为占位符)。

当您在子类中时,可以使用范围解析并使用父类版本:

void
相关问题