C++刷题--选择题4

1, 在()情况下适宜采用 inline 定义内联函数
A 函数体含有循环语句
B 函数体含有递归语句
C 函数代码少、频繁调用
D 函数代码多,不常调用

解析 C,以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,从而避免了建立函数栈帧的开销,提高了程序的运行效率。 但它对编译器仅仅是一个建议,编译器可以忽略这个请求。 只有在函数代码少,频繁调用的时候编译器才会搞成内联数。


2,在 C++ 语言中,对函数参数默认值描述正确的是()
A 函数带默认值的参数只能有一个
B 一个函数的参数若有多个,则参数默认值的设定可以不连续
C 函数参数必须设定默认值
D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值

解析 : D, 因为函数参数的缺省只能是从右向左连续的, 因为传参的时候是先传左边


3, 下面关于类定义的说法中,正确的是:
A 类定义中包括数据成员和函数成员的声明
B 类成员的缺省访问权限是保护的
C 数据成员必须被声明为私有的
D 成员函数只能在类体外进行定义

解析 :选A, B访问权限可以设定的, C可以公有,保护的, D,可以在类内定义呢


4,假定一个类的构造函数为A(int aa,int bb){a=aa–;b=a*bb;},则执行A x(4,5);语句后,x.a和x.b的值分别为
A 20和5
B 3和15
C 5和4
D 4和20

解析:选D1, 后置减减, 先用后减


5, 下列关于构造函数的描述正确的是?
A 构造函数可以声明返回类型
B 构造函数不可以用private修饰
C 构造函数必须与类名相同
D 构造函数不能带参数

解析 : C, 其余全错


有一个类A,其数据成员如下:
class A {

private:
int a;
public:
const int b;
float* &c;
static const char* d;
static double* e;
};
则构造函数中,成员变量一定要通过初始化列表来初始化的是:______。
A a b c
B b c
C b c d e
D b c d
E b
F c

解析 : 选B, 必须通过初始化列表初始化的有3种 : 1,引用 2,const常量 3,自定义对象无默认构造


7, C++ 中,有如下类模板定义:

template<class T> 
class BigNumber
{
	long n;
public:
	BigNumber(T i) :n(i) 
	{}
	
	BigNumber operator+(BigNumber b) 
	{
		return BigNumber(n + b.n);
	}
};

已知 b1, b2 是 BigNumber 的两个对象,则下列表达式中错误的是()
A 3+3
B b1+3
C b1+b2
D 3+b1

解析 : 选D, A肯定没有错误, B也是没有错误的,3其实会去调用构造函数, C肯定没有错误, D3会传递给隐含的this指针,所以错误


8, 下面有关友元函数与成员函数的区别,描述错误的是?
A 友元函数可以让本类和友元类对象调用
B 友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数
C 类的成员函数是属于类的,调用的时候是通过指针this调用的
D 友元函数是有关键字friend修饰,调用的时候也是通过指针this调用的

解析:选D, 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声
明,声明时需要加friend关键字。 而友元类的友元关系是不能传递的。

//B是A的友元, B可以访问A的私有成员。
class A
{
      friend class B;
}

9,对于以下代码,说法正确的是()

char * p = new char[100]

A p 和 new出来的内存都在栈上
B p 和 new出来的内存都在堆上
C p在栈上 new出来的在堆上
D p在堆上 new出来的在栈上

解析 : 选C


10.,类模板的使用实际上是类模板实例化成一个具体的__________
A 类
B 函数
C 模板类
D 对象

解析 : 选A


1, 关于重载函数,哪个说明是正确的()
A 函数名相同,参数类型或个数不同
B 函数名相同,返回值类型不同
C 函数名相同,函数内部实现不同
D 函数名称不同

解析 : 选择 A, 函数重载 : 在同一作用域,函数名相同,形参列表不同。
扩展: 为什么C语言不支持函数重载,C++支持呢? 因为在编译阶段, C++会将函数的形参列表信息添加到函数名修饰中,
从而可以区分相同的函数名, 而C语言不会添加,从而不能区分同名函数。


2, 关于引用以下说法错误的是()。
A 引用必须初始化,指针不必
B 引用初始化以后不能被改变,指针可以改变所指的对象
C 不存在指向空值的引用,但是存在指向空值的指针
D 一个引用可以看作是某个变量的一个“别名”
E 引用传值,指针传地址
F 函数参数可以声明为引用或指针类型

解析 : 选E, 引用和指针的底层原理一样, 所以引用表面是传值, 实际上还是传地址


3.,类定义的外部,一定可以被访问的成员有( )
A 所有类成员
B private或protected的类成员
C public的类成员
D public或private的类成员

解析 : 选C


请将下列构造函数补充完整,使得程序的运行结果是5

#include<iostream>
using namespace std;
class Sample{
public:
Sample(int x){
________
}

	~Sample()
	{
		if(p) 
		  delete p;
	} 
	
	int show()
	{
	return *p;
	} 
private:
	int*p;
};

int main()
{
	Sample S(5);
	cout<<S.show()<<endl;
	return 0;
}

解析 ,选B, new的返回值是指针


5,下列情况中,不会调用拷贝构造函数的是()

A 用一个对象去初始化同一个类的另一个新对象时
B 将类的一个对象赋值给该类的另一个对象时
C 函数的形参对象,调用函数进行形参和实参结合时
D 函数的返回值是类的对象,函数执行返回调用时

解析 : 选B,会调用赋值重载。 用一个已经存在的对象去初始化创建一个新对象的时候会调用拷贝构造。


6,以下代码共调用多少次拷贝构造函数:
Widget f(Widget u)

Widget f(Widget u)
{
	Widget v(u);
	Widget w=v;
	return w;
} 
main()
{
	Widget x;
	Widget y=f(f(x));
}

解析 :
在这里插入图片描述


7, 如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是()
A 一元运算符
B 二元运算符
C 选项A)和选项B)都可能
D 重载错误

解析:选D, 因为友元函数是普通函数,无this指针的,而运算符肯定是需要操作数的,而又无参数,肯定错误了


class A;
class B;
int main()
{
A a;
B b;
return 0;
}

main 函数中,变量 a 和 b 的构造函数和析构函数的调用顺序是()
A b构造 - a构造 - a析构 - b析构
B a构造 - a析构 - b构造 - b析构
C b构造 - a构造 - b析构 - a析构
D a构造 - b构造 - b析构 - a析构

解析 :选D, 在同一作用域中的对象析构顺序和构造顺序相反。 可以想象构造的时候进栈,析构的时候出栈


9,下面 C++ 程序的运行结果为()

#include <iostream>
using namespace std;
class cla {
static int n;
public:
cla() { n++; }
~cla() { n--; }
static int get_n() { return n; }
};
int cla::n = 0;
int main() {
cla* p = new cla;
delete p;
cout << "n=" << cla::get_n() << endl;
return 0;
}

A n=3
B n=4
C n=1
D n=0

解析 D,new的时候调用构造函数初始化n = 1, delete的时候调用析构函数,n = 0。 然后通过类名直接访问


10.,运行的程序总要与内存进行交互。内存作为操作系统中的重要资源,对内存的分配和释放进行管理是一项
非常重要的工作,以下说法中错误的是 ______。
A 内存泄露是内存管理中的常见问题
B 悬挂引用指的是对某个对象的应用实际上指向一个错误的内存地址
C 在C、C++等系统语言中,有自动的内存管理机制,不需要考虑内存管理的问题
D 程序的动态性越强,内存管理就越重要,内存分配程序的选择也就更重要

解析 : C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

通过全部用例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值