在学习别人的代码时,发现了一个__super,第一感觉很像java中的super,或者C#中的base网上查了一下发现作用差不多,都是指父类。C++本身没有__super,这是visual c++的扩展。其实在c++中,要使用父类的成员,可以直接用”父类名::成员”即可,或者利用using声明。

来自Microsoft的解释:

__super

Microsoft Specific

The __super keyword allows you to explicitly state that you are calling a base-class implementation for a function that you are overriding. All accessible base-class methods are considered during the overload resolution phase, and the function that provides the best match is the one that is called.

__super::member_function();


__super can only appear within the body of a member function.

With the introduction of ​​attributes​​ that inject code, your code might contain one or more base classes whose names you may not know but that contain methods that you wish to call.

Example

// deriv_super.cpp
struct B1 {
void mf(int) {
// ...
}
};

struct B2 {
void mf(short) {
// ...
}

void mf(char) {
// ...
}
};

struct D : B1, B2 {
void mf(short) {
__super::mf(1); // Calls B1::mf(int)
__super::mf('s'); // Calls B2::mf(char)
}
};

int main() {
}


END Microsoft Specific


中文意思:

__super是编译器关键词,是一个辅助工具,在多重继承和多级继承环境下很方便,当你需要调用基类成员时,不需要你记忆这个成员到底是哪个基类提供的,编译器会帮你找到正确的基类。如果存在二义性(比如有两个基类提供了相同名称的成员),编译器会报错,在错误信息中会指出有哪些基类具有此成员,此时你可以根据提示信息把__super修改成希望的基类。总之一句话——它帮你减少记忆负担。