C++ 类的继承二(赋值兼容性原则)
//赋值兼容性原则
#include<iostream>
using namespace std; class PointA{
public:
PointA(){
x = ;
y = ;
}
void Set(){ }
private:
int x;
int y;
}; class PointB :public PointA{
public:
private:
int c;
}; /*
自己猜想:
赋值兼容性原则内部原理分析
在子类继承父类的时候,在子类的内存区域上,父类的元素会放在前面,子类的元素会放在父类元素后面
pa-> 类的-> 本质上是成员变量相对于类指针的偏移量 因为父类元素都在子类元素的前面 相当于子类前一部分就是一个父类对象
所以用父类偏移量取成员变量完全没有问题 这也说明子类继承父类,一定继承了父类的全部成员变量 包括私有成员变量 但是父类不可以代替子类 因为子类用许多父类没有的成员变量,如果按照子类的偏移量访问成员变量 就有可能访问不属于父类的内存空间
就会报错
*/ void ProtectB(PointA pin){ } void ProtectA(){
PointA *pa = NULL;
PointB pb;
//父类可以用子类来赋值
pa = &pb;
//父类可以用子类来初始化
PointA pa1(pb);
//子类可以代替父类做形参
ProtectB(pb);
//父类可以做子类的引用
PointA &pa2 = pb;
} //总结:子类完全可以当父类用,但是父类不可以当子类使用 void main(){
system("pause");
}
//赋值兼容性原则--原理验证
#include<iostream>
using namespace std; class PointA{
public:
PointA(){
a = ;
b = ;
}
int a;
int b;
}; class PointB{
public:
PointB(){
c = ;
}
int c;
}; class PointC :public PointA, public PointB{
public:
PointC(){
d = ;
}
int d;
}; void ProtectA(){
PointC pc;
cout << "PointC类对象的地址是" << &pc << endl;
cout << "----------------" << endl;
} void main(){
ProtectA();
system("pause");
}
C++ 类的继承二(赋值兼容性原则)的更多相关文章
- C++ 抽象类一(多继承与赋值兼容性原则)
//多继承与赋值兼容性原则 #include<iostream> using namespace std; class Point{ public: Point(){ a = ; b = ...
- C++——类的继承(派生)
类的继承就是子类可以拥有父类的成员变量和成员函数 //public 修饰的成员变量 方法 在类的内部 类的外部都能使用//protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ...
- C++ 类的继承四(类继承中的重名成员)
//类继承中的重名成员 #include<iostream> using namespace std; /* 自己猜想: 对于子类中的与父类重名的成员,c++编译器会单独为子类的这个成员变 ...
- C++中的赋值兼容性和重写
1,父子间的赋值兼容: 1,子类对象可以当做父类对象使用(赋值兼容性): 1,子类对象可以直接赋值给父类对象: 2,子类对象可以直接初始化父类对象: 3,父类指针可以直接指向子类对象(得到的是子类对象 ...
- ios学习笔记(二)之Objective-C类、继承、类别和协议
二:Objective-C类与继承和协议 在前面已经提过了对象的初始化,这里首先讲的是变量. 2.1 变量 局部变量(内部变量): 局部变量是在方法内作定义说明的,其作用域仅限于方法内,离开方法后使用 ...
- ES6学习笔记(二):教你玩转类的继承和类的对象
继承 程序中的继承: 子类可以继承父类的一些属性和方法 class Father { //父类 constructor () { } money () { console.log(100) } } c ...
- c++——派生类和基类转换(类型兼容性原则)
基类也叫父类,派生类也叫子类. 类之间的继承关系继承关系是类之间的父子关系. 继承关系的特点如下:A. 子类拥有父类的所有属性和行为B. 子类也是一种特殊的父类C. 子类对象可以当父类对象使用D. 子 ...
- [技术博客]基于动态继承类、WebDriver的浏览器兼容性测试框架搭建
问题背景 观察使用selenium进行自动化测试的过程,我们可以将它概述为: 启动测试进程,在该进程中构建WebDriver 启动浏览器进程,将它与WebDriver建立连接 使用WebDriver向 ...
- class(二)--派生类的继承
前言 从我之前的一篇笔记对象的继承中, 我们可以知道JS的继承方式依赖原型链,而比较好的继承方式是寄生组合式继承 先来温习下什么是寄生组合式继承 function Rectangle(length, ...
随机推荐
- es5 - array - join
/** * join描述:将数组(或类数组对象)的所有元素连接到一个字符串中并返回此字符串. * join语法:arr .join([ separator]) * join参数:指定用于分隔数组的每对 ...
- xampp集成包如何重置mysql的密码
转自:http://blog.sina.com.cn/s/blog_4b2bcac501013s4l.html 安装使用xampp,装好后root默认没有密码,phpmyadmin是用config文件 ...
- Jni中图片传递的3种方式(转)
java层的图片如何传递到c/c+层处理,处理完之后如何传回java层,下面总结了一下用到的三种方法. 1.将Bitmap转为int[]数组对象,将数组作为参数传递到C/C++层,处理完之后再以int ...
- windows 设置定时锁屏
设置间隔指定时间电脑自动锁屏 CreateTime--2017年7月3日10:16:14Author:Marydon 参考地址:电脑爱好者杂志 举例:实现每间隔45分钟,电脑自动锁屏 实现思路: ...
- oracle 存储过程 示例
oracle 存储过程 示例 CreationTime--2018年9月4日09点49分 Author:Marydon 1.情景展示 对VIRTUAL_QRCODELOG表的静态二维码,动态二维码 ...
- 〖Fedora〗设置Fedora静态ip地址
root@Fedora:~# cat /etc/sysconfig/network-scripts/ifcfg-eth0 # Intel Corporation 82540EM Gigabit Eth ...
- 【Linux】mkdir命令
用途 mkdir命令主要是用来建立目录的 全称 mkdir的全称为:Make Directory 参数 -m :配置文件的权限 -p :帮助你直接将所需要的目录递归建立起来 案例 进入到目录/usr/ ...
- python字符串操作大全
1.去空格 strip() >>> s = 'a b c d ' >>> s.strip() 'a b c d' 2.lstrip() 方法用于截掉字符串左边的空格 ...
- 每秒处理3百万请求的Web集群搭建-为最佳性能调优 Nginx
这篇文章是<打造3百万次请求/秒的高性能服务器集群>系列的第2部分,在这个部分中你可以使用任何一种 WEB 服务器,不过我决定使用 Nginx,因其轻量级.高可靠及高性能的优点. 通常来说 ...
- ubuntu截图工具
ubuntu截图工具 首先,我们用apt-get install 去安装一个,scrot 主要用在命令行下,它使用 imlib2 库来抓取并保存图像 sudo a ...