c/c++经典面试题-part1
-
面向对象的程序设计思想是什么
把数据结构和对数据结构进行操作的方法封装成一个个对象。
-
什么是类
具有共性的的对象的集合,称之为类
-
对象都具有的两方面特征是什么?分别是什么含义
-
对象都具有的特征是:静态特征和动态特征
-
静态特征是指能描述对象的一些属性,动态特征是指对象表现出来的行为
-
-
在头文件中进行类的声明,在对应实现的文件中进行类的定义有什么意义?
- 这样可以提高编译效率,因为分开之后只需要编译一次对应生成的.obj文件,再次应用该类的地方,这个类就不会再次编译,从而大大提高了效率(整个编译过程分为预编译、编译和汇编,最终生成可执行文件,其中在windows下生成 .obj文件,在linux下生成 .o文件,学名叫做二进制可重定位文件)
- 隐藏了代码
-
在类的内部定义成员函数的函数体,这种函数会具备哪种属性?
这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。
-
成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?
通过this指针来区分,因为它指向的是对象的首地址。
-
C++编译器自动为类产生的四个缺省函数是什么?
默认构造函数(不带参数的构造函数),拷贝构造函数(用于对象间的赋值),析构函数,赋值函数(等号的赋值)。
-
拷贝构造函数在哪几种情况下会被调用?
- 当类的一个对象去初始化该类的另一个对象的时候
- 如果函数的形参是类的对象,调用函数进行形参和实参结合时
- 如果函数的返回值是类的对象,函数调用完成返回时
-
构造函数与普通函数相比在形式上有什么不同?
- 构造函数时类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的
- 构造函数名字必须与类名相同,它不具有任何类型,不返回任何值。
-
什么时候必须重写拷贝构造函数?
当构造函数涉及到动态存储分配空间时,要写自己的拷贝构造函数,并且要深拷贝
-
构造函数的调用顺序是什么?
- 先调用基类的构造函数
- 按声明顺序初始化数据成员
- 最后调用自己的构造函数
-
哪几种情况必须用到初始化成员列表?
类的成员是常量的成员初始化
类的成员是对象的成员初始化,而该对象没有无参构造函数
类的成员为引用时
-
什么是常对象(const 修饰的对象)
常对象是指在任何场合都不能对成员的值进行修改的对象
-
静态函数存在的意义
静态私有成员在类外不能被访问,可以通过类的静态成员函数来访问;
当类的构造函数是私有的时,不想普通类那样实例化自己。只能通过静态成员函数来调用构造函数
-
在类外有什么拌饭可以访问类的非公有成员
友元,继承,公有成员函数