zoukankan      html  css  js  c++  java
  • c++中 重载 覆盖 隐藏的区别 附加 mutable笔记

    成员函数被重载的特征有:

    1) 相同的范围(在同一个类中);

    //2) 函数名字相同;

    3) 参数不同;

    4) virtual关键字可有可无。

    覆盖的特征有:

    1) 不同的范围(分别位于派生类与基类);

    //2) 函数名字相同;

    3) 参数相同;

    4) 基类函数必须有virtual关键字。

    隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

    1) 如果派生类的函数与基类的//函数同名但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

    2) 如果派生类的函数与基类的//函数同名并且参数也相同但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

    =======================================================================

        mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。
        在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
        我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

    运算符重载      这几个为什么还需要细细探讨下!!!

              (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。

              (2)单目运算符最好重载为成员函数。
              (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
              (4) 对于其它运算符,建议重载为友元函数。

    运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:

              函数类型 operator 运算符名称 (形参表列)
              { 
              对运算符的重载处理
              }

    重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)
    重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参

  • 相关阅读:
    周末之个人杂想(十三)
    PowerTip of the DaySorting Multiple Properties
    PowerTip of the DayCreate Remoting Solutions
    PowerTip of the DayAdd Help to Your Functions
    PowerTip of the DayAcessing Function Parameters by Type
    PowerTip of the DayReplace Text in Files
    PowerTip of the DayAdding Extra Information
    PowerTip of the DayPrinting Results
    Win7下IIS 7.5配置SSAS(2008)远程访问
    PowerTip of the DayOpening Current Folder in Explorer
  • 原文地址:https://www.cnblogs.com/zhangkele/p/8996222.html
Copyright © 2011-2022 走看看