• jQuery火箭图标返回顶部代码


       赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有
    成员,而且所有成员的访问控制属性也和基类完全相同。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。赋
    值兼容规则中所指的替代包括以下的情况:
        1>派生类的对象可以赋值给基类对象。
      2>派生类的对象可以初始化基类的引用。
      3>派生类对象的地址可以赋给指向基类的指针。
      在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。

    示例如下:
     1 #include "stdafx.h"
     2 #include <iostream>
     3 using namespace std;
     4 
     5 class birds                        //基类
     6 {
     7 public:
     8     void Speaking()
     9     {
    10         cout << "......" << endl;
    11     }
    12 };
    13 
    14 class owl : public birds           //子类
    15 {
    16 public:
    17     void Speaking()
    18     {
    19         cout << "HOOT! HOOT! " << endl;
    20     }
    21 };
    22 
    23 
    24 int main()
    25 {
    26     birds b0;
    27     owl b1;
    28     owl b2;
    29 
    30     b0 = b2;                       //子类的对象可以赋给基类的对象
    31     b0.Speaking();
    32 
    33     birds &br = b1;                //子类的对象可以初始化基类的引用
    34     br.Speaking();
    35 
    36     birds *pt = &b1;               //子类的对象的地址可以赋给指向基类的指针
    37     pt->Speaking();
    38 
    39     return 0;
    40 }
    
    

    输出结果:

     
    由运行结果可知,当派生类的对象当成基类的对象使用时,调用的都是基类的成员函数和数据成员;


    当birds中的Speaking用virtual修饰时,输出结果会是怎样的呢?
     1 #include "stdafx.h"
     2 #include <iostream>
     3 using namespace std;
     4 
     5 class birds                        //基类
     6 {
     7 public:
     8     virtual void Speaking()
     9     {
    10         cout << "......" << endl;
    11     }
    12 };
    13 
    14 class owl : public birds           //子类
    15 {
    16 public:
    17     virtual void Speaking()
    18     {
    19         cout << "HOOT! HOOT! " << endl;
    20     }
    21 };
    22 
    23 
    24 int main()
    25 {
    26     birds b0;
    27     owl b1;
    28 
    29     b0 = b1;                       //子类的对象可以赋给基类的对象
    30     b0.Speaking();
    31 
    32      birds &br = b1;                //子类的对象可以初始化基类的引用
    33     br.Speaking();
    34 
    35     birds *pt = &b1;               //子类的对象的地址可以赋给指向基类的指针
    36     pt->Speaking();
    37 
    38     return 0;
    39 }

    输出结果:

     注意:
     复制兼容规则不适用于基类对象,只适用基类引用和指针。
    
    
    
    
    
  • 相关阅读:
    maven问题
    用例图中三种关系详解(转)
    UML系列图--用例图
    Visio画UML用例图没有include关系的解决方法
    Linux中环境变量文件及配置
    如何开启ubuntu的SSH服务(不要和openssl搞混淆了)
    linux下的gedit命令使用方法与技巧
    ubuntu安装mysql5.7
    通过 HTTP 头进行 SQL 注入
    Redis各种数据结构内存占用测试
  • 原文地址:https://www.cnblogs.com/Trojan00/p/8835047.html
Copyright © 2020-2023  润新知