C++ 抽象类一(多继承与赋值兼容性原则)
//多继承与赋值兼容性原则
#include<iostream>
using namespace std; class Point{
public:
Point(){
a = ;
b = ;
}
int a;
int b;
}; class PointA {
public:
PointA(){
c = ;
}
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++ 类的继承二(赋值兼容性原则)
//赋值兼容性原则 #include<iostream> using namespace std; class PointA{ public: PointA(){ x = ; y = ; ...
- C++中的赋值兼容性和重写
1,父子间的赋值兼容: 1,子类对象可以当做父类对象使用(赋值兼容性): 1,子类对象可以直接赋值给父类对象: 2,子类对象可以直接初始化父类对象: 3,父类指针可以直接指向子类对象(得到的是子类对象 ...
- java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...
- java中抽象类是否可以继承实体类?
一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题. 题目如下:问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类, ...
- 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口.抽象类可以实现(implements)接口,抽象类可以继承具体类.抽象类中可以有静态的main方法. 问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是 ...
- python开发面向对象基础:接口类&抽象类&多态&钻石继承
一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 答:接口可以继承接口.抽象类可以实现(implements)接口,抽象类 ...
- C++赋值兼容原则
C++赋值兼容原则(派生类对象是基类对象,反之不成立) –基类指针强制转换成派生类指针 –派生类中重定义基类成员(同名覆盖) 假设, 一个基类 "普通人", 一个派生类 " ...
- C++赋值兼容原则理解
–赋值兼容原则(派生类对象是基类对象,反之不成立)–基类指针强制转换成派生类指针–派生类中重定义基类成员(同名覆盖) 假设, 一个基类 "普通人", 一个派生类 "超人& ...
随机推荐
- Windows Vista如何让梦幻桌面支持更多格式
Windows Vista 梦幻桌面(DreamScene)到底能不能支持除了Mpeg/mpg以外的格式? 很多人说梦幻桌面的视频格式有限,像AVI.RM.RMVB就不能做成梦幻桌面!也有很多朋友着急 ...
- IOS 开发学习33 使用sqlite3
sqlite3 命令行简单使用 sqlite3 路径 //打开数据库路径连接 select * from sqlite_master where type="table"; //显 ...
- 解决游戏server负载上限问题
近期开发一款网络游戏,快到公布阶段.可是server的负载上限问题,这个该怎么处理呢? 如今有下面几种方案: 1.排队机制,像wow那样: 2.给当已满服打上一个"满"标记,不让玩 ...
- 用C开发PHP扩展 实例(基础版)
第一步:建立扩展骨架. cd /usr/local/src/php-5.3.6/ext/ ./ext_skel --extname=laiwenhui 第二步:修改编译参数. cd php-5.3.6 ...
- js设置加载进度提示
CreateTime--2017年8月23日09:17:46Author:Marydon js设置加载进度提示 第一部分:CSS /*加载样式*/ .Loading { position: abs ...
- 【Linux】通过传入变量进行数学运算
一个简单的sum求和 #! /bin/bash ## For get the sum of tow numbers ## Writen by Qinys ## Date:2018-06-26 a=1 ...
- springmvc管理资源开放
关于web.xml的url映射的小知识:<url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀 ...
- Struts2中的变量
<package name="mypackage" extends="struts-default"> <global-results> ...
- 使用struct与使用class初始化对象效率对比
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- jq 遍历元素 筛选
var productInfo = $.grep(productData, function (value) { return value.productInfo.pId == favourite.p ...