繁体   English   中英

在 C++ 中被覆盖后如何调用原始 function?

[英]How to call original function after it's been overridden in C++?

我用两个函数 read() 和 write() 序列化我的大部分类。 我想做的是从子类调用基本 class 的 read/write() function,这样我就不必多次重复序列化代码。

例如:

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 独有的任何属性。 这样我就不必为每个子类重复序列化代码(并且可能忘记这样做)。

您可以通过在 function 调用前加上基类标识符来调用基类函数,然后是 scope 运算符 (::)。

像这样:

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().
}

编辑:请注意删除。

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

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

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

void Sub::read(QDataStream& qds) {
    Base::read(qds);

    // do more stuff
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM