我怎么以及何时会调用超类方法?请参考以下两个选项的代码段:
class SuperClass {
public:
void method();
};
class SubClass : public SuperClass {
public:
void someOtherMethdo(){
this->method();
SuperClass::method();
}
};
Run Code Online (Sandbox Code Playgroud)
使用this->method()您调用一个函数,该函数可以在您的超类中实现,也可以由您自己的类调用.
使用时superClass::method(),请确保拨打父母实施的呼叫.
#include <iostream>
#include <string>
class A {
public:
void func() {
std::cout << "A func" << std::endl;
}
};
class B : A {
public:
void func() {
std::cout << "B func" << std::endl;
}
void exec() {
this->func();
A::func();
}
};
int main() {
B b;
b.exec();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此示例代码将输出
B func
A func
Run Code Online (Sandbox Code Playgroud)
this->method();
Run Code Online (Sandbox Code Playgroud)
...调用method派生类(和简单编写一样method();).这可以从父类调用继承的方法(并在示例中执行),或者它可以在子类中调用重写的版本(如果存在的话,它将调用).
SuperClass::method();
Run Code Online (Sandbox Code Playgroud)
...将始终在父级上调用该方法.当您想要保留和扩展父类方法的功能时,通常在子窗口中使用此语法.例如
Class SubClass: public SuperClass {
//...
void method() {
SuperClass::method();
//...
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在第二种情况下使用第一种语法,您将获得递归.
另请注意,这与virtual方法无关.将方法标记为virtual通过基类指针调用方法时,将调用可用的最派生类方法.在上面的代码中,由于没有涉及基类指针,因此任何方法都是虚拟的也没有区别.