1. 谈谈你对面向对象的理解。
答:(1) 所有的事物都可抽象成不同的类,而具体事物就是这些类的一个对象。编程时可以将对象想象为一种新型变量,它保存着数据,而且还可以对自身数据进行操作。
程序是由很多对象组合而成的。通过消息传递,各对象知道自己应该做些什么。如果需要让对象做一些事情,则需向该对象发出一条行为指令。
要为每个对象分配存储空间。对象可以容纳其他对象,即通过封装现有的对象,可以产生新型对象。因此,尽管对象的概念非常简单,但是经过封装以后却可以在程序中达到任意的高复杂程度。
每个对象都属于特定的类。根据语法,每个对象都是某个“类”的一个“实例”。一个类最重要的特征是“能将什么消息发给它”,即类有哪些行为。
综上所述:面向对象可以理解成对待每一个问题,都是首先要确定这个问题由几个部分组成,而每一个部分其实就是一个对象。然后再分别设计这些对象,最后得到整个程序。传统的程序设计多是基于功能的思想来进行考虑和设计的,而面向对象的程序设计则是基于对象的角度来考虑问题。这样做能够使得程序更加简洁、清晰。
2. 面向过程和面向对象有什么区别?
答:面向过程就是指分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题步骤中的行为。
3. 对象都具有的二方面特征是什么?分别是什么含义?
答:对象都具有的特征是静态特征和动态特征。静态特征是指能描述对象的一些属性,动态特征是指对象表现出来的行为。
4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?
答:这样可以提高编译效率,因为分开的话只需要编译一次,,再次应用该类的地方,这个类就不会被再次编译,从而大大提高了效率。
5. 在类的内部定义成员函数的函数体,这种函数会具备哪种属性?
答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。
6. 成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?
答:通过this指针来区分的,因为它指向的是对象的首地址。
7. C++编译器自动为类产生的四个缺省函数是什么?
答:默认构造函数,拷贝构造函数,析构函数,赋值函数。
8. 拷贝构造函数在哪几种情况下会被调用?
答:(1) 当用类的一个对象去初始化该类的另一个对象时;
(2) 如果函数的形参是类的对象,调用函数进行形参和实参结合时;
(3) 如果函数的返回值是类对象,函数调用完成返回时。
9. 构造函数与普通函数相比在形式上有什么不同?(从构造函数的作用,它的声明形式来分
析)
答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。
构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。
10. 什么时候必须重写拷贝构造函数?
答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
11. 构造函数的调用顺序是什么?
答:(1) 先调用基类构造函数;
(2) 按声明顺序初始化数据成员;
(3) 最后调用自己的构造函数。
12. 哪几种情况必须用到初始化成员列表?
答:(1) 类有常量成员;
(2) 类有对象成员,而该对象没有无参构造函数;
(3) 类有引用成员。
13. 什么是常对象?
答:常对象是指在任何场合都不能对其成员的值进行修改的对象。
14. 静态函数存在的意义?
答:静态私有成员在类外不能被访问,可通过类的静态成员函数来访问;当类的构造函数是私有的时,不像普通类那样实例化自己,只能通过静态成员函数来调用构造函数。
15. 在类外有什么办法可以访问类的非公有成员?
答:友元,继承,公有成员函数。
16. 什么叫抽象类?
答:不用来定义对象而只作为一种基本类型用作继承的类。
17. 运算符重载的意义?
答:为了对用户自定义数据类型的数据的操作与内定义的数据类型的数据的操作形式一致。
18. 不允许重载的5个运算符是哪些?
答:(1) .*(成员指针访问运算符)
(2) ::(作用域运算符)
(3) sizeof(长度运算符)
(4) ?:(条件运算符)
(5) .(成员访问运算符)
19. 运算符重载的三种方式?
答:普通函数,友元函数,类成员函数。
20. 流运算符为什么不能通过类的成员函数重载?一般怎么解决?
答:因为通过类的成员函数重载必须运算符的第一个是自己,而对流运算的重载要求第一个参数是流对象。一般通过友元来解决。
21. 赋值运算符和拷贝构造函数的区别与联系?
答:相同点
C开发工程师常用面试题 来自淘豆网m.daumloan.com转载请标明出处.