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. ...
随机推荐
- 基于libVLC的视频播放器
本文来自于:http://blog.csdn.net/leixiaohua1020/article/details/42363079 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放 ...
- C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数
1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...
- IDEA热部署配置
一.IDEA热加载的作用: 热加载的作用就是当你保存修改,新增,删除代码或者文件后,不需要重新启动项目,直接就能运行. 二.IDEA热记载的配置方法 1.配置pom文件,加载依赖 Maven. < ...
- WEBGL学习【九】立方体贴不同的纹理
<html> <!--开始实现一个三维街景的渲染效果--> <head> <meta http-equiv="Content-Type" ...
- 记Spring搭建功能完整的个人博客「Oyster」全过程[其一] 整体思路:需求、架构及技术要求
一两个星期前正在了解Linux内核,看得有点累,突然想趁着五一放假写个博客学学spring. 由于没有在一开始下定决心写这个博客系统,所以我又没记录一开始的分析过程.这都是写了一个星期之后的思路了. ...
- Linux目录结构组成
linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp --- 用户所有服务 httpd ...
- (3)Spring Boot热部署【从零开始学Spring Boot】
在编写代码的时候,你会发现我们只是简单把打印信息改变了下,就需要重新部署,如果是这样的编码方式,那么我们估计一天下来之后就真的是打几个Hello World之后就下班了.那么如何解决热部署的问题呢?那 ...
- Google NewSQL之Spanner
谷歌分布式三宝 BigTable.GFS.MapReduce这传说中的谷歌分布式三驾马车,虽然谷歌没有公开具体实现代码,但却公布了相应论文,对分布式文件系统.大数据挖掘和NoSQL流行起了重大促进作用 ...
- sql中自连接的使用
一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...
- redis-ubuntu环境下安装
ubuntu环境下联网安装 进去系统后,首先修改root的密码 命令 sudo passwd 设置新的密码:XXX 切换为root操作 $ wget http://download.redis.io/ ...