第7题 构造函数调用时机
下列哪个叙述是正确的()
A构造函数在声明对象的时候被调用
B构造函数在使用对象的时候被调用
C构造函数在声明类的时候被调用
D构造函数在使用类的时候被调用
A对象一声明,就像“出生”,构造函数马上自动执行。
- B 错:不是等你使用对象才构造。
- C/D 错:声明类只是写图纸,不会造对象。
第8题 const 成员函数
下列正确声明 const 函数的是()
Aconst int ShowData(void) { /* statements */ }
Bint const ShowData(void) { /* statements */ }
Cint ShowData(void) const { /* statements */ }
DBoth A and B
C成员函数后面的 const 才表示“这个函数不改对象”。
- A/B 的 const 修饰返回值,不是 const 成员函数。
第9题 this 指针
下列使用 this 指针访问类的数据成员中,正确的是()
Athis->x
Bthis.x
C*this.x
D*this-x
Athis 是指针,指针访问成员用箭头 ->。
第10题 不能重载的运算符
下列哪个运算符不能被重载()
C三目运算符 ?: 不能重载,属于 C++ 固定规则。
第11题 new 运算符
关于 new 运算符,下面说法正确的是()
A返回指向已创建的对象的指针
B创建名为 new 的对象
C获取一个新类的内存
D告知为对象分配了多少内存
Anew 创建对象,结果给你一个指针。
第12题 拷贝构造调用时机
以下哪种情况将执行拷贝构造函数()
A当用类的一个对象去初始化该类的另一个对象时
B将一个对象作为实参传递给一个非引用类型的形参
C从一个返回类为非引用的函数返回一个对象时
D以上都是
D新对象、按值传参、按值返回,都是拷贝构造高发点。
第13题 友元函数
下列哪种函数不是类的成员函数()
A构造函数
B析构函数
C友元函数
D拷贝构造函数
C友元函数能访问私有成员,但它不是成员函数。像“外人拿了通行证”。
第14题 inline 函数
下列关于 inline 函数叙述正确的是()
A提高运行速度
B降低运行速度
C增加代码大小
DBoth A and C
Dinline 像把小函数复制到调用处:可能少跳转更快,也可能复制多了代码变大。
第15题 抽象类
抽象类()
A最多包含一个纯虚函数
B可以实例化为对象
C不能有抽象派生类
D不能被实例化为对象
D抽象类是“半成品图纸”,不能直接造对象。
第16题 纯虚函数声明
下列声明纯虚函数的正确方式是()
Avirtual void Display(void){0};
Bvirtual void Display = 0;
Cvirtual void Display(void) = 0;
Dvoid Display(void) = 0;
C纯虚函数固定写法:有 virtual,函数后面 = 0;。
第17题 构造函数特点
下面关于类的构造函数的说法正确的是()
A一个类只能有一个构造函数
B不能有返回类型
C可以为 void 类型
D不能使用缺省参数
B构造函数没有返回类型,连 void 都不能写。
第18题 拷贝构造参数
拷贝构造函数如何接收参数()
Aeither pass-by-value or pass-by-reference
Bonly pass-by-value
Conly pass-by-reference
Donly pass by address
C必须引用传参。按值传参会为了传参再调用拷贝构造,变成无限套娃。
第19题 动态绑定
下列哪个概念意味着在运行时决定所调用的函数()
AData hiding
BDynamic Typing
CDynamic binding
DDynamic loading
C运行时决定调用谁,就是动态绑定 Dynamic binding。
第20题 函数模板
所有的函数模板定义都以()关键词开头
Aclass
Bvirtual
Ctemplate
Doperator
C模板题先写 template <typename T>。
第21题 基类和派生类指针
下列哪种赋值会产生编译错误()
A将基类对象的地址赋值给基类指针
B将基类对象的地址赋值给派生类指针
C将派生类对象的地址赋值给基类指针
D将派生类对象的地址赋值给派生类指针
B子类对象可以当父类看;父类对象不能硬当子类看,因为它缺少子类那一部分。
第22题 析构函数不能重载
下列函数中,()不能重载
C析构函数没有参数,没法靠参数列表区分,所以不能重载。
第23题 析构函数定义
下面()选项是对类的析构函数的正确定义
AA::~A()
Bvoid A::~A(参数)
CA::~A(参数)
Dvoid A::~A()
A析构函数没有返回类型,没有参数,名字是 ~类名。
第24题 catch 块
()封装捕获到异常时所执行的代码
Atry块
Bcatch块
Cthrow
Dexception
Btry 是试一试,throw 是扔异常,catch 是接住以后处理。
第25题 new 失败异常
new 操作失败时抛出的特殊异常是()
Aexception
Bbad_alloc
CDivideByZero
Dno_exception
B内存分配失败就是 allocation bad,记 bad_alloc。
第26题 静态数据成员
关于静态数据成员下列正确的是()
A说明静态数据成员时前边要加修饰符 static
B静态数据成员可以在类体内进行初始化
C在类外引用公有静态的数据成员时,必须在静态数据成员前加类名和作用域运算符
D静态数据成员不是所有对象所共享的
A/C这题按题面看像多选,A 和 C 都正确。若老师强制单选,以老师给的答案为准。
- B 一般错:普通静态数据成员通常要在类外定义/初始化。
- D 错:static 就是所有对象共享一份。
第27题 引用参数
已知:类A中一个成员函数说明如下:void Set(A &a); 其中,A &a 的含义是()
A定义指向类A的指针为a
B将a的地址值赋给变量Set
Ca是类A的对象引用,用来做函数Set()的参数
D变量A与a按位相与作为函数Set()的参数
C& 放在类型后面是引用,不是取地址。
第28题 默认构造函数
默认构造函数是()
A构造函数的参数均为默认参数
B当没有提供构造函数时,编译器提供的构造函数
C不执行任何初始化操作
DA和B
D能不带参数调用的构造函数,都可以当默认构造函数用。
第29题 引用和指针区别
引用与指针的区别()
A引用不能为null
B引用一旦建立不能更改
C引用无需显式解引用
D以上全是
D引用像对象的别名:不能为空,绑上不换,用起来像原变量。
第30题 显式调用基类函数
应在下列程序划线处填入的正确语句是()
class Base {
public:
void fun() { cout << "Base::fun" << endl; }
};
class Derived : public Base {
void fun() {
____________ // 显式调用基类的函数 fun()
cout << "Derived::fun" << endl;
}
};
Afun();
BBase.fun();
CBase::fun();
DBase->fun();
C类名加作用域运算符:Base::fun();,就是点名调用父类版本。
第31题 static 输出
以下程序输出为()
class abc {
public:
static int w;
int i;
abc() { i = ++w; }
};
int abc::w = 1;
int main() {
abc a, b, c;
cout << a.w << " " << b.i << endl;
}
Bw 是共享的,从 1 变 2、3、4;b.i 是 b 出生时的 3。
第32题 引用返回值
以下程序输出为()
int z = 15;
int& f() { return z; }
int main() {
f() = 20;
cout << z;
}
Df() 返回 z 本人,所以 f() = 20 就是在改 z。
第33题 函数模板 maximum
给定函数模板,函数调用 maximum(2, 5); 和 maximum(2.3, 5.2); 的返回值是什么?
template <class T>
T maximum(T value1, T value2) {
if (value1 > value2)
return value1;
else
return value2;
}
A5 和 类型不匹配错误
B5 和 5.2
C2 和 2.3
D两条错误信息
B第一次 T 推成 int,返回 5;第二次 T 推成 double,返回 5.2。