1. 假定AB为一个类,则执行“AB a(2), b[3],*p[4];
”语句时调用该类构造函数的次数为()A. 3 B. 4 C. 5 D. 9 答案:B 解析:(P79)a(2)调用1次带参数的构造函数,b[3]调用3次无参数的构造函数,指针没有给它
分配空间,没有调用构造函数。所以共调用构造函数的次数为4。
【C++基础题目积累】
2. 如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为()
A. a.operator++(1) B. operator++(a) C. operator++(a,1) D. a.operator++() 答案:D
解析:(P186)运算符的重载,前缀先让变量变化。调用++a,等价为a.operator++(),注意无参
的形式。后缀的话a++,等价于a.operator(0),带形参,形参名可省。
3.
内联函数
特征代码少,频繁调用,执行效率高。重载函数
解决统一接口的问题;递归
子程序调用,程序调用要耗费很多空间和时间,循环/迭代都比递归有效率得多,递归只是
从形式上,逻辑比较简洁。嵌套函数
反复调用,速度较慢。
4. 要实现动态联编必须() A. 通过成员名限定来调用虚函数
B. 通过对象名来调用虚函数
C. 通过派生类对象来调用虚函数
D. 通过对象指针或引用来调用虚函数 答案:D 解析:(P170)通过基类指针或基类引用来调用虚函数实现动态多态性,静态多态性通过重载来实
现的。所以选择D项。
5. 已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确 的是() A. A1.p=5;
B. A1->p=5;
C. A1.*p=5;
D. *A1.p=5;
答案:C
解析:(P118)A中p是指针即地址,错误;B选项中A1不是指针不能使用指向运算符->,错误 ;“*”比“.”级别要高,所以D选项*A1.p=5相当于(*A1).p=5;
错误。另外涉及到指向成员函数
时注意以下几点:
指向成员函数的指针必须于其赋值的函数类型匹配的三个方面:(1)参数类型和个数;(2)返回
类型;(3)它所属的类类型。
成员函数指针的声明:指向short型的Screen类的成员的指针定义如下:short Screen::* ps_Screen;
ps_Screen可以用_height的地址初始化如下:short Screen::*ps_Screen=&Screen::_height;
类成员的指针必须总是通过特定的对象或指向改类型的对象的指针来访问。是通过使用两个指
向成员操作符的指针(针对类对象和引用的.*,以及针对指向类对象的指针的->*)
6. 如果采用动态多态性,要调用虚函数的是() A. 基类对象指针 B. 对象名 C. 基类对象 D. 派生类名 答案:A
解析:基类指针或者基类引用调用虚函数都会产生动态多态性
7. C++支持的两种多态性分别是___多态性和运行多态性。(一个进入对象语言的金典问题)答案:(P165)静态或编译
[解析]多态性包括静态(编译时)的和动态(运行时)的动态性。
8.对赋值运算符进行重载时,应声明为___函数。 答案:(P183)类成员
[解析]运算符重载的方法有友元或者成员函数两种途径,但是赋值运算符只能使用成员函数的
方法来实现。