1. 引用和指针有什么区别?

本质:一个是别名,一个是地址
1. 指针可以在运行时改变其所指向的,引用一旦和某个对象绑定就不再改变
2. 引用没有const, 指针有const
3. 从内存上看,指针会分配内存区域,引用不会,它仅仅是一个别名
4. 在参数传递时,引用会做类型检查,而指针不会 
5. 引用不能为,指针可以为空

【类型检查、const、内存、值、空】

2. const和define有什么区别?

本质define只是字符串替换,const参与编译运行
1. define不会做类型检查,const拥有类型,会执行相应的类型检查 
2. define仅仅是宏替换,不占用内存,而const会占用内存 
3. const内存效率更高,编译器通常将const变量保存在符号表中,而不会分配存储空间,这使得它成为一个编译期间的常量,没有存储和读取的操作

3. define和inline有什么区别?

本质define只是字符串替换,inline由编译器控制
• define只是简单的宏替换,通常会产生二义性;而inline会真正地编译到代码中 
• inline函数是否展开由编译器决定,有时候当函数太大时,编译器可能选择不展开相应的函数

4. malloc和new有什么区别?(malloc/free和new/delete)

本质:malloc/free 是C语言的库函数,new/delete是C++的操作符

malloc仅仅用来分配内存,而不会执行相应的构造函数,函数返回值void*;而new会调用相应的构造函数返回值的是相应对象类型的指针

(new内部是调用malloc的,new相当于malloc和构造函数的一个结合体。)

follow up:有了malloc/free为什么还要new/delete?

对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器的控制范围之内,不能把执行构造函数和析构函数的任务强加于malloc/free.

5. C++中static关键字作用有哪些?

1. 扩展生存周期(如局部static变量)
2. 限制作用域:用于全局变量。与普通全局变量不同的是,它表明该变量的作用域仅限于当前cpp文件,因此当其他cpp文件中同样出现同名的static变量时,他们是不同的独立的变量。

follow up:

1) 成员函数能否同时修饰为static和const的呢?

不能。

static成员函数:由类的所有对象共有,以为单位。

const函数:表示不会修改对象的成员变量。是以对象为单位。

static函数是从类的角度,const函数是从对象的角度。一个函数要么是的,要么是对象的,不可能同时满足。

(以上都是针对成员函数来说。成员变量的话是可以同时用的。)

2) static函数能否调用非static函数呢?

不能。类似上一题。

static是以类为单位,非static修改的对象的成员变量。它们不是一个层次的。

6. C++中const关键字作用有哪些?

1.) 修饰变量

指向const变量的指针:(const在*左边。指针所指的内容不能被修改)
  const int* ptr;
  int const* ptr;
const指针:(const在*右边。指针本身不能被修改)
  int* const ptr;

2.) 修饰成员函数,表示该成员函数不会修改成员变量

7. const变量真的不能被修改吗?

可以通过指针修改。如,

const int a = ;
int* ptr = NULL;
ptr = (int*)(&a);
*ptr = ;

详见NCH slide。

8. C++中包含哪几种强制类型转换?他们有什么区别和联系?

dynamic_cast : 
继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点
static_cast:
同旧式C转型,如int 到double
const_cast:
常用于去除某个对象的常量性
reinterpret_cast
不具备移植性,常见用途是转化函数指针类型

Use dynamic_cast for converting pointers/references within an inheritance hierarchy.

Use static_cast for ordinary type conversions.

Use reinterpret_cast for low-level reinterpreting of bit patterns. Use with extreme caution.

Use const_cast for casting away const/volatile. Avoid this unless you are stuck using a const-incorrect API.

ref     ref2

9.

STL共有六大组件
  1、容器。2、算法。3、迭代器。4、仿函数。6、适配器。

仿函数(functor),就是使一个的使用看上去象一个函数。其实现就是类中实现一个operator()。【本质是一个

reference

10. 面向对象的特性:封装、继承、多态

ref

11.  重载、覆盖和隐藏的区别

首先,重载、覆盖和隐藏都是针对两个同名函数而言的。

重载必须是同一个类中的两个同名函数,参数不同

覆盖和隐藏都是针对的派生类和基类而言。

如果派生类的函数与基类的函数同名,但是参数不同,此时,不论是否是虚函数,基类的该函数将被隐藏

如果派生类的函数与基类的函数同名,并且参数相同,如果基类的该函数不是虚函数,则基类的该函数被隐藏;如果基类的该函数虚函数,则基类的该函数被覆盖。(覆盖只针对虚函数而言)

调用时:

重载:看参数。

覆盖:看指针实际指向的对象(即虚函数调用规则)。

隐藏:看指针类型

ref: http://www.cnblogs.com/txwsh1/archive/2008/06/28/1231751.html 【总结的很全面。从上到下把例子都看看就明白了】

C++易混淆概念的更多相关文章

  1. C#中一些易混淆概念总结

    C#中一些易混淆概念 这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框 ...

  2. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  3. 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  4. 【C#小知识】C#中一些易混淆概念总结(五)---------继承 分类: C# 2014-02-06 22:05 1106人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  5. 【C#小知识】C#中一些易混淆概念总结(五)---------深入解析C#继承

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  6. 【C#小知识】C#中一些易混淆概念总结(四)---------解析Console.WriteLine() 分类: C# 2014-02-05 17:18 1060人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) [C#小知识]C#中一些易混淆概念总结(三) ------------------------------ ...

  7. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  8. 【C#小知识】C#中一些易混淆概念总结(二)--------构造函数,this关键字,部分类,枚举 分类: C# 2014-02-03 01:24 1576人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 继上篇对一些C#概念问题进行细节的剖析以后,收获颇多.以前,读书的时候,一句话一掠而 ...

  9. 【C#小知识】C#中一些易混淆概念总结---------数据类型存储,方法调用,out和ref参数的使用

    这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框架类库) 这些类是微软 ...

  10. JavaScript 进阶(五)易混淆概念null vs undefined, == vs ===, string vs String

    先看一段代码 var foo = {} foo.a = null alert(foo.a == null)     //true alert(foo.a === undefined)  //false ...

随机推荐

  1. 详解C#委托和事件(一)

    委托(Delegate)是安全封装方法的类型,类似于C和C++中的函数指针,与函数指针不同的是,委托是面向对象的.类型安全的和可靠的: 一.委托类型是CTS中五种基础类型之一,是一种引用类型,表示对具 ...

  2. JDK自带工具介绍

    JDK工具一览表 工具名称 功能描述 appletviewer.exe 用于运行并浏览applet小程序. apt.exe 注解处理工具(Annotation Processing Tool),主要用 ...

  3. 电信固定ip宽带80与8080端口踩坑

    本文只是作为记录,避免后面遇到此类问题耗费时间. 实际情况:公司有个固定电信宽带是固定IP的,想把固定IP映射到测试环境ip,实现可以公网通过固定ip访问,内网通过局域网ip访问. 测试环境服务是占用 ...

  4. BFS和DFS详解以及java实现

    前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问的问题中几乎有一半的问题都可以用图的 ...

  5. px、pt和em的区别

    (转载)http://www.1z1b.com/one-blog-a-week/px-em-pt/ 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网 ...

  6. 这个PHP无解深坑,你能解出来吗?(听说能解出来的都很秀)

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由horstxu发表于云+社区专栏 1. 问题背景 PHP Laravel框架中的db migration是比较常用的一个功能了.在每个 ...

  7. [转]React 教程

    本文转自:http://www.runoob.com/react/react-install.html React 可以直接下载使用,下载包中也提供了很多学习的实例. 本教程使用了 React 的版本 ...

  8. 本地启动activemq,报错解决

    本地启动activemq时,报错.可以看到是5672端口被占用.在网上查了各种资料,有说是杀掉进程的,有说是禁用Internet Connection Sharing (ICS)服务的,楼主试了都没生 ...

  9. PHP module 安装

    Part1:不重新安装php,安装zlib模块--------20171229 先安装zlib源码包 指定到目录 一台服务器,编译PHP时未设置参数,导致缺少zlib扩展,无法执行解压缩,错误信息是: ...

  10. 手把手教你写一个java的orm(完)

    生成sql:select 上一篇讲了怎样生成一个sql中where的一部分,之后我们要做事情就简单很多了,就只要像最开始一样的生成各种sql语句就好了,之后只要再加上我们需要的条件,一个完整的sql就 ...