C++之易混淆知识点五
一、解析类继承中父类与子类之间成员的访问可见度:
外部可见度:指的是被子类继承的父类成员在子类的外部访问控制度,有protected、public、private。
内部可见度:指的是被子类继承的父类成员在子类定义的方法中的内部访问控制度,有可访问(Y)、不可访问(N)。

class A
{
private:
void pvA();
protected:
void ptA()
public:
void pbA();
....
}
class B:public A
{
void func()
{
pvA(); //error
ptA(); //ok
pbA(); //ok
}
....
}
void g( B &b)
{
b.pvA(); //error
b.ptA(); //error
b.pbA(); //ok
}
class B:protected A
{
void func()
{
pvA(); //error
ptA(); //ok
pbA(); //ok
}
....
}
void g( B &b)
{
b.pvA(); //error
b.ptA(); //error
b.pbA(); //error
}
class B:private A
{
void func()
{
pvA(); //error
ptA(); //ok
pbA(); //ok
}
....
}
void g( B &b)
{
b.pvA(); //error
b.ptA(); //error
b.pbA(); //error
}
二、类的构造函数中调用虚方法会怎么样:
构造函数中调用了虚方法将导致运行时错误。原因是:当父类的构造函数被调用的时候,此时子类的构造函数还没有被调用,但是由于父类的构造函数中调用了虚方法,根据虚方法的实现机制,父类调用的虚方法是定义在子类中的,也就是说在此期间调用的virtual函数下降到子类阶层中,而子类的函数要使用子类的成员变量,而此时子类的成员变量还没有被初始化,这就意味着调用了一个还没有完成构造的类型对象的方法,于是就出现了调用错误。
顺便提一下:当一个类型被构造的时候,其构造顺序是:先执行成员变量的初始化表达式,然后执行父类的构造函数,最后调用类型自己的构造方法。
三、内存中分配引用类型的实质:
首先在堆栈上分配一个引用对象,在堆上分配一个对象实例,然后使得堆栈上的引用对象指向堆上的对象实例。
例如:
class person
{
private:
char *name;
int age;
public:
person(char *s,int n):name(s),age(n){}
....
}
person a=new person("Tom",24);
person b=a; //设计到深浅拷贝的问题

四、上面的语句person b=a; 设计到深浅拷贝的问题,这里的b=a是浅拷贝,也就是将对象a的引用复制一份给b,两则指向同一个实际实例,而深拷贝是完全复制对象a给对象c,也就是不仅复制引用,而且还复制实际指向的实际实例。如图深拷贝为:

C++之易混淆知识点五的更多相关文章
- Java-web易混淆知识点整理
Java-web易混淆知识点 post和get区别 post: 数据不会显示在地址栏 安全 大小无限制 可以提交二进制文件 get: 数据显示在地址栏 不安全 get方式提交有大小限制(约4kb) 相 ...
- php易混淆知识点
一.define(“constant”, “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...
- 【PMP】易混淆知识点
一.混淆概念 德尔菲技术 德尔菲技术是组织专家达成一致意见的一种方法.项目专家匿名参与其中.组织者使用调查问卷就重要的项目议题征询意见,然后对专家的答卷进行归纳,并把结果反馈给专家做进一步评论.这个过 ...
- C++易混淆知识点整理
// 1 /////////////////////////////////////////////////////////////////////// // 常量指针:,指针可修改,变量不可修改(只 ...
- C语言之数组与指针的易混淆知识点
一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容 ...
- C++之易混淆知识点二
1.数据抽象与封装 数据抽象是一种接口和实现相分离的编程技术,设计者关心的是如何实现这些接口,而使用者仅仅知道这些接口,抽象地考虑这些接口做什么的就可以了,不必去考虑如何实现这一层次. 封装是将低层次 ...
- CSS易混淆知识点总结与分享-定位与布局
CSS定位有四种模式:static.relative.absolute.fixed,其它static是默认值,下面分别讲解下各自的特点: static:静态定位,处于动态布局流中,按照页面中的各元素先 ...
- mysql易混淆知识点
1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross join ...
- JavaScript易混淆知识点小回顾--数组方法与字符串方法;
数组属性: arr.length;查看数组的长度 arr.Pop;删除数组最后一个元素; 数组的方法: arr.push();添加到数组末端; arr.shift();删除数组的第一个元素; arr. ...
随机推荐
- hdu3488 / hdu3435 / hdu1853 最小费用最大流 圈 拆点
题目大意: 在一个有向图中,求经过所有点的最小圈. 思路: (如果是用二分图的完美匹配来做,那么直接上模版就好了).http://www.cnblogs.com/Potato-lover/p/3991 ...
- SpringMVC(一) HelloWorld
学习新东西的的第一个程序--HelloWorld,以下是SpringMVC的HelloWorld 第一步: 用MAVEN 创建webapp,并添加依赖.(强烈建议使用MAVEN,MAVEN学习书籍和视 ...
- MongoDB_基础知识
mongoDB术语:database-数据库,collection-数据库表/集合,document-数据记录行/文档,field-数据字段/域,index-索引,primary key-主键(Mon ...
- Here comes Treble: A modular base for Android
On the Android team, we view each dessert release as an opportunity to make Android better for our u ...
- Windows环境下制作MACOS X U盘安装盘
前两天在朋友的MAC BOOK AIR上胡乱操作时把原来安装好的双系统搞坏了,一不小心又把硬盘格式化了,导致MAC系统也没了,于是只能重新安装MACOS系统,并根据网友提供的教程,在MACOS安装OK ...
- Java Web中的mapper,service,controller,model
Java Web中的mapper,service,controller,model作用分别是:java web中mapper是对象持久化映射层,一般会继承ibatis或者mybatisservive是 ...
- 序列模型(5)-----双向神经网络(BRNN)和深层循环神经网络(Deep RNN)
一.双向循环神经网络BRNN 采用BRNN原因: 双向RNN,即可以从过去的时间点获取记忆,又可以从未来的时间点获取信息.为什么要获取未来的信息呢? 判断下面句子中Teddy是否是人名,如果只从前面两 ...
- jquery ajax 全介绍
下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...
- POJ 2115 C Looooops( 简单拓欧 + 快速幂 )
链接:传送门 题意:题目中给出一个循环 for (variable = A; variable != B; variable += C) ,这个东东还需要 mod 2^k 问至少多次能退出,如果进入死 ...
- maven的依赖冲突时的原则
1.如图: 假设上图中的项目B引入了一个junit.jar架包是3.0的版本 项目D引入了一个junit.jar架包是4.0的版本,那么项目X引用的将会是4.0的版本 2.pom.xml排到最前面的架 ...