当前位置: 首页 > news >正文

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");
}

相关文章:

  • Mysql 备份与恢复
  • php 审核管理
  • 《Android深度探索》第八章心得体会
  • redis集群部署配置
  • 在互联网时代,你是消费者还是创造者?
  • 面向对象之设计模式大全
  • 关于win10配置MAVEN问题
  • php进阶整理
  • Bootstrap速学教程之简要介绍
  • CentOS如何查看端口是被哪个应用/进程占用
  • MFT的0x10标准属性数据结构
  • 一个简单的AXIS远程调用Web Service示例
  • 用五种以上的方式调试php
  • 使用System.Drawing.Imaging.dll进行图片的合并
  • Java中Collection和Iterator接口
  • [译]前端离线指南(上)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • CODING 缺陷管理功能正式开始公测
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES6系列(二)变量的解构赋值
  • ES6系统学习----从Apollo Client看解构赋值
  • ES6语法详解(一)
  • Facebook AccountKit 接入的坑点
  • Java深入 - 深入理解Java集合
  • Netty 4.1 源代码学习:线程模型
  • Redux系列x:源码分析
  • Vue2 SSR 的优化之旅
  • Vue实战(四)登录/注册页的实现
  • zookeeper系列(七)实战分布式命名服务
  • 对JS继承的一点思考
  • 翻译:Hystrix - How To Use
  • 缓存与缓冲
  • 解析 Webpack中import、require、按需加载的执行过程
  • 我是如何设计 Upload 上传组件的
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 译米田引理
  • 怎么将电脑中的声音录制成WAV格式
  • 找一份好的前端工作,起点很重要
  • 主流的CSS水平和垂直居中技术大全
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2)nginx 安装、启停
  • (26)4.7 字符函数和字符串函数
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)正点原子I.MX6ULL u-boot移植
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot码头作业管理系统 毕业设计 341654