1.在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用

局部变量的作用域内会覆盖同名的全局变量

2.假定有类AB,有相应的构造函数定义,能正确执行语句,请问执行完此语句后共调用该类的构造函数次数为?
AB a(4), b(5), c[3], *p[2] = {&a, &b};
答案:5

解析:只有给对象分配内存才调用构造函数
AB a(4) 定义对象a,调用了带一个参数的构造
AB b(5) 跟上面的性质类似,调用了带一个参数的构造
AB c[3] 跟上面的性质类似,定义对象数组,调用无参构造3次
AB *p[2] 指针数组,其元素分别指向a和b,所以没有调用构造函数

3.执行这个程序的结果是()
#include<iostream> using namespace std; class TestClass{ char x; public:
TestClass() { cout << 'A'; } TestClass(char c) { cout << c; } ~TestClass() {
cout<< 'B'; } }; int main() { TestClass p1, *p2; p2 = new TestClass('X'); delete
p2; return 0; }
答案:AXBB

解析:
类指针的声明,是不会调用构造函数的;但是指向一个类实例(new)就会调用构造函数。
类的声明,会调用默认构造函数。
TestClass p1, *p2; //只为p1调用默认构造——A
p2 = new TestClass(‘X’); //调用构造函数,由p2指向——X
delete p2; //释放内存空间,p2所指实例调用析构函数——B
return 0; //程序结束,p1调用析构——B

4.string d(“20160314”); 定义了一个字符串
string y=d.substr(0,4); 从0位置开始数4个字符赋值给了字符串y

5.malloc与free是标准库函数,new/delete是运算符
new初始化对象,调用对象的构造函数,malloc仅仅分配内存
new、delete返回的是所分配类型变量(对象)的指针,malloc、free返回的是void指针

6.下列对重载函数的描述中,错误的是?

A.重载函数中不允许使用默认参数
B.重载函数中编译时根据参数表进行选择
C.构造函数重载将会给初始化带来多种方式
D.不要使用重载函数来描述毫无相干的函数

答案:A

解析:重载函数可以有默认参数,但使用时要注意二义性

一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应于形参相同。有时多次调用同样的实参,C++提供简单的处理办法,给实参一个默认值,这样实参就不必从实参取值了。
如有一函数声明:
float area (float r=6.5);
指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如: area( ); //相当于area(6.5);
如果不想使形参取默认值,则通过实参另行给出。如:area(7.5)

7.如下代码的输出结果是()

答案:9

解析:对数组名取地址是取的整个数组的地址,所以&a+1自然要跨过整个数组的长度,本题即跨过2*5 = 10个int的长度。
&a + 1 = a + 1 * sizeof(a) = 1 * 10 * 4 = 40个字节,就是要跨国整个二维数组的大小
有了上述概念,再来分析这道题,int *ptr = (int
*)(&a+1),p此时指向的地址应该是a[1][4]后面的地址,由于ptr是int型指针,ptr-3应该是ptr向前移动3个元素,即ptr-3指向a[1][2],所以
*(ptr -3) = 9

8.在 32 位机器上,对齐模数为 8,下面代码打印结果为?
#include <iostream> using namespace std; class Base { char data[3]; public:
virtual void f() { cout << "Base::f" << endl; } virtual void g() { cout <<
"Base::g" << endl; } virtual void h() { cout << "Base::h" << endl; } }; int main
() { cout << sizeof(Base) << endl; return 0; }
答案:8

解析:C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。
如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,在32位机器上,一个对象会增加4个字节来存储此指针,在64位机器上,是8个字节,它是实现面向对象中多态的关键。而虚函数本身和其他成员函数一样,是不占用对象的空间的

9.C++当中,以下关于抽象类的说法正确的有?

A.抽象类只能用作其他类的基类
B.不能使用抽象类定义对象
C.抽象类不能用作参数类型、函数返回类型或显式转换的类型
D.抽象类不能有构造函数和析构函数

答案:ABC

解析:抽象类的定义:

纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”,有虚函数的类就叫做抽象类。
抽象类有以下几个特点:
(1)抽象类只能用作其他类的基类,不能建立抽象类对象。
(2)抽象类不能用作参数类型、函数返回类型或显式转换的类型。
(3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信