zoukankan      html  css  js  c++  java
  • 揭秘继承技术之虚函数(二)

    修改方法的特征

    1.修改方法的返回值类型

      如果原始方法的返回值类型是某个类的指针或引用,重写的方法可以将返回值改变为子类的指针或引用。这个叫协变返回。(我的理解是:子类“是一个“父类)

      不能将返回值类型修改为完全不相干的类型。

    2.如果在子类中使用父类虚方法的名称,但参数与父类中同名方法不同,那么这不是对父类方法的重写而是创建了一个新方法。原始的方法将被隐藏,子类无法调用。

       可用using关键字显式地在子类中包含父类方法。

    静态方法无法被继承。

    当指定名称及一组参数重写某个方法时,编译器将隐式地隐藏父类中所有同名方法的其他实例。

    C++中根据描述对象的表达式绑定默认参数,而不是根据实际对象类型绑定参数。

    方法会继承而默认参数不会被“继承”:使用指向子类对象的父类指针调用的是子类重写的方法,而默认参数却是父类中的默认参数。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 
     6 class Super 
     7 {
     8 public:
     9     Super(){}
    10     virtual void get(int i = 1){cout<<"There is Super. i="<<i;}
    11     ~Super(){}
    12 };
    13 
    14 class Sub :public Super
    15 {
    16 public:
    17     Sub(){}
    18     void get(int i = 2){cout<<"There is Sub. i="<<i;}
    19      ~Sub(){}
    20 };
    21 
    22 int main()
    23 {
    24     Super* ptr;
    25     ptr = new Sub;
    26     ptr->get();
    27     return 0;
    28 }

    运行结果:

  • 相关阅读:
    编译原理词/语法分析
    【转】 c# 中为何load事件中不能画图
    [原创]GAMITGLOBK数据处理报告
    Google Earth上的点标记
    序贯平差
    【原创】C#写的水准网平差程序
    楼梯问题:一次最多跨两个阶梯,有多少种走法
    springMVC + Dubbo + zooKeeper超详细 步骤
    Git(to be continued...)
    autoconf & automake
  • 原文地址:https://www.cnblogs.com/baiyideng/p/3617505.html
Copyright © 2011-2022 走看看