zoukankan      html  css  js  c++  java
  • VC++中的__super::

      在学习别人的代码时,发现了一个__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修改成希望的基类。总之一句话——它帮你减少记忆负担。

  • 相关阅读:
    数据库之主表、从表、主键、外键
    eclipse编写js代码没有提示
    思维导图xmind的使用方法
    整理一下Apache与Tomcat的关系
    全栈开发者,一个很好的自学编程网站
    svn文件被锁不能提交的解决办法
    在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题
    php安装redis扩展
    PHP点击按钮拷贝
    PHP文件下载
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/8831125.html
Copyright © 2011-2022 走看看