1.C++虚函数的工作原理

  虚函数(virtual function)需要虚函数表(virtual table)才能实现。如果一个类有函数声明成虚拟的,就会生成一个虚函数表,存放这个类的虚函数地址。若子类没有覆写虚函数,该子类的虚函数表就会存放父类的函数地址。调用这个虚函数时,就会通过虚函数表解析函数的地址。在C++中,动态绑定(dynamic bindding)就是通过虚函数表机制实现的。

2.深拷贝和浅拷贝的区别

  浅拷贝会将对象所有成员的值拷贝到另一个对象里。使用浅拷贝时,必须非常小心,只有当我们知道自己在做什么时才可选用浅拷贝。多数情况下,使用浅拷贝是为了传递一块复杂结构的信息,但又不想真的复制一份数据。使用浅拷贝时,销毁对象也必须非常小心。

  深拷贝除了拷贝所有成员的值,还会进一步拷贝所有的指针对象。

  在实际开发中,浅拷贝很少使用。大部分情况都应该使用深拷贝,特别是当需要拷贝的结构很小时。

 struct Test
{
char * ptr;
}; void shallowCopy(Test & src , Test & dest)
{
dest.ptr = src.ptr;
} void deepCopy(Test & src , Test & dest)
{
dest.ptr = (char * ) malloc(strlen(src.ptr) + );
strcpy(dest.ptr , src.ptr);
}

3.C语言的关键字“volatile”的作用

  关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能会被外界修改。操作系统、硬件或其他线程都有可能修改该变量。该变量的值有可能遭受意料之外的修改。所以,每次使用时,编译器都会重新从内存中获取这个值。

  volatile的整数声明语句:

 int volatile x;
volatile int x;

  声明指向volatile整数的指针:

volatile int *  x;
int volatile * x;

  指向非volatile数据的volatile指针很少见,但也是可行的:

int * volatile x;

  如果声明指向一块volatile内存的volatile指针变量(指针本身与地址所指向的内存都是volatile),volatile变量不会被优化掉。

int volatile * volatile x;

  volatile变量在多线程程序里很有用,对于全局变量,任意线程都可能修改这些共享的变量。我们可能不希望编译器对这些变量进行优化,我们就可以使用volatile关键字。

4.C++基类的析构函数声明为virtual的原因

  确保正确调用继承关系最末端的子类的析构函数。

C/C++学习之基础-001的更多相关文章

  1. Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降

    深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...

  2. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  3. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  4. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  5. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  6. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  7. Ant学习-001-ant 基础知识及windows环境配置

    一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...

  8. 学习javascript基础知识系列第二节 - this用法

    通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...

  9. 学习javascript基础知识系列第三节 - ()()用法

    总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...

随机推荐

  1. double精度问题,数据范围

    浮点数在计算机中存储方式  http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html 1. double:  1bit(符号位) ...

  2. Linux chmod命令修改文件与文件夹权限的命令附实例

    Linux chmod命令修改文件与文件夹权限的命令附实例 作者:佚名 字体:[增加 减小] 来源:互联网 时间:05-01 20:46:07我要评论 在linux中要修改一个文件夹或文件的权限我们需 ...

  3. 添加无线服务wzcsvc服务,Eventlog服务

    <添加eventlog服务.reg> Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont ...

  4. 解决由于一个软件限制策略的阻止,windows无法运行此程序cmd.reg

    解决由于一个软件限制策略的阻止,windows无法运行此程序cmd.reg Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFT ...

  5. bzoj题解汇总(1001-1016)

    bzoj1001: 平面图网络流. 注意只有一行或者一列的情况. bzoj1002: 待定系数法求解递归式.或者用MatrixTree+行列式直接推导. 然后来个高精度. bzoj1003: dp+最 ...

  6. IE7浏览器下CSS属性选择器二三事

    一.为何专门说起IE7 以前,或者说数年前,我们从事桌面端网页开发的时候,基本上都还要兼顾IE6浏览器, 即使有些特性,IE7支持,我们也会忽略之.于是,我们会不自然地把IE6和IE7浏览器归为一路货 ...

  7. Mongoose学习参考文档

    一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entit ...

  8. 经典排序算法---冒泡排序(Bubble Sort)

    原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束 void Bubble ...

  9. (26)odoo中的序列运用

    * 模块中增加序列    __openerp__.py :    ...     'data': [        'product_data.xml',    ],    ...    ------ ...

  10. hdu---(3779)Railroad(记忆化搜索/dfs)

    Railroad Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...