CC++ 基础知识点整理(二) 局部变量能够和全局变量重名吗? 请简述extern关键字在C++语言中的作用? 请简述头文件包含中使用<>和""的不同? 请简述C++语言中struct和class的区别 请说出const与#define相比有什么优势? 请简述面向对象的三个基本特征? 请简述多态的作用? main 函数执行以前,还会执行什么代码? 结构与联合有何区别? 类A中没有任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是0,请解释一下编译器为什么没有让它为0?

  • 答:可以重名,如果局部变量和全局变量重名,则默认在函数中访问的相同标识符是代表局部变量,如果要访问全局变量,则可以在标识符前面加上::即可,::在此处表示要访问全局域中的标识符。

请简述extern关键字在C++语言中的作用?

  • 答:有两个作用,作用一是用于声明全局变量;作用二是告知C++编译器,某些函数是被C语言编译器编译出来的,这样C++就能通过正确的名称来链接C语言编译器编译出来的函数了。

  • 答:<>是从编译系统设置的头文件搜索目录中搜索头文件,找不到就报错;""是先在工程所在目录中搜索头文件,找不到就再去编译系统设置的头文件搜索目录中搜索头文件,再找不到就报错。

请简述C++语言中struct和class的区别

  • 答:struct 的成员默认是公有的,而类的成员默认是私有的。struct和class在其他方面是功能相同的。一般约定俗成的规矩,如果一个复合数据类型仅仅包含一些公有成员变量而没有成员函数或仅仅是很少的成员函数,那么这个复合数据类型可以设置为struct,否则的话应该设置为class。

请说出const与#define相比有什么优势?

  • 答:const常量有数据类型,编译器可以对其进行类型安全检查,而宏仅仅是文本替换,没有“类型”;另外有些集成化的调试工具可以对const常量进行调试,但是不能对宏进行调试。

请简述面向对象的三个基本特征?

  • 答:封装,将客观事物抽象成类,每个类对自身的数据和方法实行访问权限管理;继承,即子类自动拥有父类的所有成员变量和成员函数,保护、公有成员可以被子类成员函数访问,私有成员不能被子类成员函数访问;多态,简单地说就是通过相同的代码根据不同情况调用不同函数的过程,具体实现一般是父类指针指向子类对象调用子类对象的虚成员函数

请简述多态的作用?

  • 答:有两个作用,作用一是隐藏实现细节,使得代码能够模块化,扩展代码模块,实现代码重用;作用二是接口重用,为了类在继承和派生的时候,保证使用继承体系下任一类的实例的某一属性时的正确用

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

  • 答:进程启动后,要执行一些初始化代码(如设置环境变量等),然后跳转到main执行。全局对象的构造也在main之前。

结构与联合有何区别?

  • 答:1)结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合转只存放了一个被选中的成员, 而结构的所有成员都存在。
    2)对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

类A中没有任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是0,请解释一下编译器为什么没有让它为0?

  • 答:肯定不是零,举个反例,如果是零的话,声明一个class A[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0]、A[1]…A[9]了。