原始函数在C++被覆盖后如何调用?
How to call original function after it's been overridden in C++?
我用两个函数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唯一的任何属性。这样,我就不必为每个子类重复序列化代码(可能会忘记这样做(。
您可以通过在函数调用前加上基类标识符和范围运算符(::(来调用基类函数。
像这样:
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++中无效,编译器可能会抱怨"default int"行为并让它通过,但您应该给它们返回类型(我将使用void
作为占位符(。
当您在子类中时,您可以范围解析并使用父类版本:
void Sub::read(QDataStream& qds) {
Base::read(qds);
// do more stuff
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Singleton模式中的手动析构函数调用:调用多次
- 从同一父调用调用不同的子类函数
- 我可以通过CPP程序中的数据库调用调用Java程序
- C++17标准对在nullptr上调用delete有何规定
- NSIS系统::调用-调用方法失败
- 参数构造函数调用调用
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
- 让非托管 C++ 代码调用调用 C# 代码的托管 C++ 代码
- 关于在矢量上调用clear如何改变容量,标准有何规定
- 如何让函数调用调用它的函数
- 如何p/调用调用函数只使用,但c++需要.a/.lib/.o文件
- C#DLL可以调用调用本机C++静态库的C++/CLI托管包装器吗