zoukankan      html  css  js  c++  java
  • C++ 抽象类一(多继承与赋值兼容性原则)

    //多继承与赋值兼容性原则
    #include<iostream>
    using namespace std;
    
    class Point{
    public:
        Point(){
            a = 1;
            b = 2;
        }
        int a;
        int b;
    };
    
    class PointA {
    public:
        PointA(){
            c = 3;
        }
        int c;
    };
    
    class PointB :public Point, public PointA{
    };
    
    void ProtectB(){
        PointB pb;
        Point *p1 = &pb;
        PointA *pa = &pb;
        cout << "pb的地址" << &pb << endl;
        cout << "*p1的地址" << p1 << endl;
        cout << "*pa的地址" << pa << endl;
        cout << "----------------" << endl;
        /*
        由于观察结果可知:
        &pb;这个操作,c++编译是对&操作符做重载了,
        c++编译器对于&pb;这个操作会根据接受地址的类的类型取一个偏移量
        Point *p1 = &pb; c++编译器会检测出Point这个类型在PointB的内存内所占内存的空间偏移量,从而返回对应的地址
    
        正因为c++编译器对&操作符的重载,才实现了赋值兼容性原则
    
        运算符重载的本质分析:
        运算符重载本质上是定义了一个函数名是  operator操作符   的全局函数
        类中的成员函数实现运算符重载也只比全局函数少传递一个参数而已
        猜想 :
        c++编译器编译的时候会将所有operator修饰的操作符存入一张表中
        当c++编译器检测到被operator修饰的操作符参与的运算时,会获取这个操作符的各个操作数
        并将这个操作数的类型与带有operator关键字的全局函数进行匹配,
        如果发现匹配成功,c++编译器会直接执行这个全局函数   将这个全局函数的返回值作为该操作符的返回值
    
        */
    }
    
    void main(){
        ProtectB();
        system("pause");
    }

  • 相关阅读:
    lipo命令
    Eclipse安装ADT插件
    编译vo-aacenc遇到的问题
    双MIC安卓手机录音问题
    天天动听MP3解码器性能提升50%
    Sublime Text 2结合VS2010配置C C++编译
    讯飞语音语义接口测试
    讯飞语音接口注册
    iOS阶段学习第31天笔记(UINavigationBar介绍)
    iOS App上架AppStore 会遇到的坑
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5639817.html
Copyright © 2011-2022 走看看