//赋值兼容性原则
#include
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
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++ 抽象类一(多继承与赋值兼容性原则)
//多继承与赋值兼容性原则 #include using namespace std; class Point{ public: Point(){ a = ; b = ...
C++——类的继承(派生)
类的继承就是子类可以拥有父类的成员变量和成员函数 //public 修饰的成员变量 方法 在类的内部 类的外部都能使用//protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ...
C++ 类的继承四(类继承中的重名成员)
//类继承中的重名成员 #include 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, ...
随机推荐
fwrite写入文件不成功bug
文件写入了,只是从头覆盖了!因为在fwrite():前面 文件位置指针是是SEEK_SET,即首位置.在fwrite(fileHeader, 1, 10, file); 前面加上一行fseek(fil ...
IntelliJ IDEA 12.0 +Maven 初使用 - WEB项目的建立
新建项目 1.Fiew菜单 - New Project,选择Maven Module项,输入Project name,选择项目所在的路径,选择SDK,其余默认即可,点击Next按钮
swift3.0 创建一个app引导页面
swift毕竟不像是oc ,第三方的框架很多,更何况是3.0,自己动手写了个引导页面,看得上我代码的麻友可以拿去用 引导页面有三个部分构成,scrollview用语切换引导视图,pageControl ...
转:";在已损坏了程序内部状态的XXX.exe 中发生了缓冲区溢出";的一种可能原因
我的问题跟原作者的问题差不多.头文件和DLL不匹配导致的. 原文链接:http://blog.csdn.net/u012494876/article/details/39030887 今天软件突然出现 ...
node基础 --工具
npm //Node.js Package Manager 查询版本号:npm --version/npm version 查询模块:npm search 查看模块相关信息 ...
firework便捷截LOGO
1.魔术棒选空白部分 2.按delete键 3.符合画布
linux系统环境变量.bash_profile/bashrc文件
系统环境变量的查看: [root@localhost ~]# envHOSTNAME=localhost.localdomainSELINUX_ROLE_REQUESTED=TERM=xtermSHE ...
[LeetCode] Falling Squares 下落的方块
On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ...
ELK-log4j2异步输出+logstash
1.pom.xml配置文件 log4jlog4j
ubuntu 通过apt安装jdk
需要先添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 安装jdk8 sudo apt-get instal ...
本文探讨了C++中子类继承父类的原理,涉及赋值兼容性、内存布局与访问权限。通过实例展示了子类如何完全替代父类,但父类不能直接操作子类的所有特性。重点讲解了多继承、重名成员和类型兼容性原则,并通过代码实例验证这些概念。
&spm=1001.2101.3001.5002&articleId=115668574&d=1&t=3&u=ad77c04896e9447e96ff19e5c94c2dec)
1940

被折叠的 条评论
为什么被折叠?



