C++ 抽象类一(多继承与赋值兼容性原则)

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
}

以上是关于C++ 抽象类一(多继承与赋值兼容性原则)的主要内容,如果未能解决你的问题,请参考以下文章

C++笔记--面向对象(OOP)编程基础--类的继承及多态

C++基础6 继承 类型兼容 satatic 多继承 虚继承 多态 案例 虚析构函数 重载重写重定义

赋值兼容原则

C++ 继承与派生中的赋值兼容规则问题探究

C++ 继承与派生中的赋值兼容规则问题探究

[C++]——继承赋值兼容规则与组合 (这一篇就够了!)