现在的位置: 首页 > 综合 > 正文

【C/C++】C++必须知道的基础问题

2018年04月23日 ⁄ 综合 ⁄ 共 1558字 ⁄ 字号 评论关闭

一、概述

1、C++虽然是从C语言中发展的,但其中有许多要点,是C语言中所没有的,包括引用,内联函数等,在此做一个介绍。

2、对于C/C++中的基础是必须要详细了解的,能够深刻理解其含义以及其来源,是一个人内功深刻的表现。如果一些基础的问题,都说不上来,又如何给人以信心呢。

 

二、常见的问题

1、为什么要使用内联函数,其作用是什么?

a:inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。

宏的问题:

使用预处理器实现,没有了参数压栈,代码生成 等一系列的操作

不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处

如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定义来实现,使用内联函数可以完全解决宏使用的几个问题。

 

2、引用和指针的区别?

a:C++编译器通常采用指针的方式实现,但引用其实不是指针,其行为和指针并不相同。

主要有三大区别:

不存在空引用

所有引用都要初始化

一个引用永远指向用来对它初始化的那个对象。

 

3、不能重载的运算符

a:  .   ?:   siezof     ::   .*

 

4、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

a:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,
限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

 

5、“引用”与多态的关系?

a:引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。

 

6、main 函数执行以前,还会执行什么代码?

a:全局对象的构造函数会在main 函数之前执行。

 

7、struct 和 class 的区别?

a:struct 的成员默认是公有的,而类的成员默认是私有的。

 

8、请说出const与#define 相比,有何优点?

a:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

  

三、总结

1、先收录的这些都是非常基础的问题,能够深入的理解这些问题,说明对C++的理解是比较全面的。

2、这些问题也会经常出现在面试中,所以准备面试的话可以多研究一下。


抱歉!评论已关闭.