第二章
1、2-1 C++语言有那些主要特点和优点?
解:
C++语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++C更安全,C++的编译系统能检查出更多的类型错误。 C++语言最重要的特点是支持面向对象。
2、2-6 注释有什么作用?C++中有哪几种注释的方法?他们之间有什么区别?
解:
注释在程序中的作用是对程序进行注解和说明,以便于阅读。编译系统在对源程序进行编译时不理会注释部分,因此注释对于程序的功能实现不起任何作用。而且由于编译时忽略注释部分,所以注释内容不会增加最终产生的可执行程序的大小。适当地使用注释,能够提高程序的
可读性。在C++中,有两种给出注释的方法:一种是延用C语言方法,使用"/*""*/"括起注释文字。另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。
5、2-21 什么叫常量?什么叫变量?
解:
所谓常量是指在程序运行的整个过程中其值始终不可改变的量,除了用文字表示常量外,也可以为常量命名,这就是符号常量;在程序的执行过程中其值可以变化的量称为变量,变量是需要用名字来标识的。
6、2-22 变量有哪几种存储类型?
解:
变量有以下几种存储类型:
auto存储类型:采用堆栈方式分配内存空间,属于一时性存储,其存储空间可以被若干变量
多次覆盖使用;
register存储类型:存放在通用寄存器中;
extern存储类型:在所有函数和程序段中都可引用;
static存储类型:在内存中是以固定地址存放的,在整个程序运行期间都有效。
7、2-30比较Break语句与Continue语句的不同用法。
解:
Break使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句,不能用在别处;
continue 语句结束本次循环,接着开始判断决定是否继续执行下一次循环;
第三章
1、3-1 C++中的函数是什么?什么叫主调函数,什么叫被调函数,二者之间有什么关系?如何调用一个函数?
解:
一个较为复杂的系统往往需要划分为若干子系统,高级语言中的子程序就是用来实现这种模块划分的。C和C++语言中的子程序就体现为函数调用其它函数的函数被称为主调函数被其它函数调用的函数称为被调函数一个函数很可能既调用别的函数又被另外的函数调用,这样它可能在某一个调用与被调用关系中充当主调函数,而在另一个调用与被调用关系中充当被调函数
调用函数之前先要声明函数原型。按如下形式声明:
类型标识符 被调函数名 (含类型说明的形参表);
声明了函数原型之后,便可以按如下形式调用子函数:
函数名(实参列表)
2、3-3 比较值调用和引用调用的相同点与不同点。
解:
值调用是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参
引用调用将引用作为形参,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。这样形参就成为实参的一个别名对形参的任何操作也就直接作用于实参
3、3-4 什么叫内联函数?它有哪些特点?
解:
定义时使用关键字 inline的函数叫做内联函数;
编译器在编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;
析构方法内联函数体内不能有循环语句和switch语句
内联函数的定义必须出现在内联函数第一次被调用之前
对内联函数不能进行异常接口声明
4、3-5 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?
解:
不必一致,所有的参数是根据位置和类型而不是名字来区分的。
5、3-6 重载函数时通过什么来区分?
解:
重载的函数的函数名是相同的,但它们的参数的个数和数据类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。
6、3-11 什么叫作嵌套调用?什么叫作递归调用?
解:
函数允许嵌套调用,如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。
函数可以直接或间接地调用自身,称为递归调用。
第四章
1、4-1 解释public和private的作用,公有类型成员与私有类型成员有些什么区别?
解:
公有类型成员public关键字声明,公有类型定义了类的外部接口;私有类型的成员private关键字声明,只允许本类的函数成员来访问,而类外部的任何访问都是非法的,这样,私有的成员就整个隐蔽在类中,在类的外部根本就无法看到,实现了访问权限的有效控制。
2、4-2 protected关键字有何作用?
解:
protected用来声明保护类型的成员,保护类型的性质和私有类型的性质相似,其差别在于继承和派生时派生类的成员函数可以访问基类的保护成员
3、4-3 构造函数和析构函数有什么作用?
解:
构造函数的作用就是在对象被创建时用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数在对象创建的时候由系统自动调用
析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也就是专门作扫尾工作的。一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。
4、4-4 数据成员可以为公有的吗?成员函数可以为私有的吗?
解:
可以,二者都是合法的。数据成员和成员函数都可以为公有或私有的。但数据成员最好定义为私有的。
6、4-6 什么叫做复制构造函数?复制构造函数何时被调用?
解:
复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用,其作用是使用一个已经存在的对象,去初始化一个新的同类的对象。在以下三种情况下会被调用:在当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象,调用函数进行形参和实参结合时;如果函数的返回值是类对象,函数调用完成返回时
7、4-7 拷贝构造函数与赋值运算符(=)有何不同?
解:
赋值运算符(=)作用于一个已存在的对象;而拷贝构造函数会创建一个新的对象。
第五章
1、5-1 什么叫做作用域?有哪几种类型的作用域?
解:
作用域讨论的是标识符的有效范围,作用域是一个标识符在程序正文中有效的区域。C++的作用域分为函数原形作用域、块作用域(局部作用域)、类作用域和文件作用域.
2、5-2 什么叫做可见性?可见性的一般规则是什么?
解:
可见性是标识符是否可以引用的问题
可见性的一般规则是:标识符要声明在前引用在后,在同一作用域中,不能声明同名的标识符。对于在不同的作用域声明的标识符,遵循的原则是:若有两个或多个具有包含关系的作用域,声明的标识符如果在没有声明同名标识符时仍可见,如果声明了同名标识符则层标识符不可见
3、5-5 什么叫做静态数据成员?它有何特点?
解:
类的静态数据成员是类的数据成员的一种特例,采static关键字来声明。对于类的普通数据
成员,每一个类的对象都拥有一个拷贝,就是说每个对象的同名数据成员可以分别存储不同的数值,这也是保证对象拥有自身区别于其它对象的特征的需要,但是静态数据成员,每个类只要一个拷贝,由所有该类的对象共同维护和使用,这个共同维护、使用也就实现了同一类的不同对象之间的数据共享。
4、5-6 什么叫做静态函数成员?它有何特点?
解:
使用static关键字声明的函数成员是静态的,静态函数成员属于整个类,同一个类的所有对象共同维护,为这些对象所共享。静态函数成员具有以下两个方面的好处,一是由于静态成员函数只能直接访问同一个类的静态数据成员,可以保证不会对该类的其余数据成员造成负面影响;二是同一个类只维护一个静态函数成员的拷贝,节约了系统的开销,提高程序的运行效率。
5、5-8 什么叫做友元函数?什么叫做友元类?
解:
友元函数是使用friend关键字声明的函数,它可以访问相应类的保护成员和私有成员。友元类是使用friend关键字声明的类,它的所有成员函数都是相应类的友元函数。
第六章
1、6-6 运算符*和&的作用是什么?
解:
*称为指针运算符,是一个一元操作符,表示指针所指向的对象的值&称为取地址运算符,也是一个一元操作符,是用来得到一个对象的地址
2、6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别?
解:
指针一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是一个对象地址,这个地址中的值就是另一个对象的内容。
3、6-11 引用和指针有何区别?何时只能使用指针而不能使用引用?
解:
引用是一个别名不能为NULL不能被重新分配;指针是一个存放地址的变量。当需要对变量重新赋以另外的地址或赋值为NULL时只能使用指针。
第七章
1、7-1 比较类的三种继承方式public公有继承、protected保护继承、private私有继承之间的差别。
解:
不同的继承方式,导致不同访问属性的基类成员在派生类中的访问属性也有所不同:
公有继承,使得基类public(公有)和protected(保护)成员的访问属性在派生类中不变,而基类private(私有)成员不可访问。
私有继承,使得基类public(公有)和protected(保护)成员都以private(私有)成员身份出现在派生类中,而基类private(私有)成员不可访问。
保护继承中,基类public(公有)和protected(保护)成员都以protected(保护)成员身份出现在派生类中,而基类private(私有)成员不可访问。
2、7-2 派生类构造函数执行的次序是怎样的?
解:
派生类构造函数执行的一般次序为:调用基类构造函数;调用成员对象的构造函数;派生类的构造函数体中的内容。
3、7-4 什么叫做虚基类?有何作用?
解:
当某类的部分或全部直接基类是从另一个基类派生而来,这些直接基类中,从上一级基类继承来的成员就拥有相同的名称,派生类的对象的这些同名成员在内存中同时拥有多个拷贝,
我们可以使用作用域分辨符来唯一标识并分别访问它们。我们也可以将直接基类的共同基类设置为虚基类,这时从不同的路径继承过来的该类成员在内存中只拥有一个拷贝,这样就解决了同名成员的唯一标识问题。