161-169

注:以下问题的部分解析并非全部是自己原创,只是为了便于以后复习,直接粘贴总结的答案,主要来源是七月在线中的解析部分。https://www.julyedu.com/question/selectAnalyze/kp_id/4/cate/C

1、下面对于友元函数的描述正确的是( )

A 友元函数不能访问类的私有成员
B 友元函数是类的成员
C 友元函数的实现必须在类的内部定义
D 友元函数破坏了类的封装性和隐藏性

解释:选D

友元函数并不是类的成员函数,但是他可以访问类的所有成员,包括私有成员。友元函数可以在类内定义也可以在类外定义。

2、 内存释放的原则是谁申请谁释放( )

A 错
B 对

解释:选B

在C++中,malloc()和free()是标准库函数,new和delete是运算符,malloc()和new可用于申请动态内存,与之对应的free()和delete用于释放内存。需要注意的是,如果申请内存后不释放就会造成内存泄露。因此,当不再需要申请的内存时,一定要释放内存;释放后应该把指向这块内存的指针指向NULL。

3、 已知int a , *pa=&a; 输出指针pa十进制的地址值的方法是( )

A cout << *pa;
B cout << long(&pa);
C cout << pa;
D cout << &pa;

解释:选B

一般以十六进制为单位表示内存地址,所以cout << &pa会输出十六进制的内存地址,cout << long(&pa);将内存地址强制转换为十进制输出。

4、 被非静态成员函数访问的类的数据成员( )

A 不可能是类的静态数据成员
B 只能是类的非静态数据成员
C 只能是类的静态数据成员
D 可以是非静态数据成员或静态数据成员

解释:选D

静态成员函数只能访问静态数据成员;
非静态成员函数可以访问非静态数据成员也可以访问静态数据成员

5、有如下程序

class Name
{
char name[20];
public:
Name()
{
strcpy(name , “”);
cout<<’?’;
}
Name(char *fname)
{
strcpy(name , fname);
cout<<’?’;
}
};
void main()
{
Name names[3] = {Name(“张三”) , Name(“李四”) };
}
运行此程序输出符号?的个数是( )
A 1
B 2
C 0
D 3

解释:选D

在C++中,无参构造函数会被系统自动调用。在主函数中,生成了两个对象,共调用了两次有参构造函数,所以总共输出3个问号。

6、 关键词explicit的作用是什么( )

A 它使一个默认构造函数的声明变为强制性的
B 它可以使一个变量存在主内存中而不是处理器的缓存中
C 它可以防止单参数的构造函数被用于隐式转换

解释:选C

关键字explicit,可以阻止经过转换构造函数进行的隐式转换(不应该允许的)的发生,声明为explicit的构造函数不能在隐式转换中使用,故答案为C。

7、下列输出字符‘A’的方法中,( )是错误的。

A char A = ‘A’; cout << A;
B cout << ‘A’;
C cout << put(‘A’);
D cout.put(‘A’);

解释:选D

put()是C++中ostream流的成员函数,函数原型:ostream& put( char ch ),而cout为输出流对象,调用时应该用成员选择运算符(.),所以C不正确。

8、关于read()函数的下列描述中,( )是对的。

A 该函数只能从键盘输入中获取字符串
B 该函数只能按规定读取所指定的字符数
C 该函数只能用于文本文件的操作中
D 该函数所获取的字符多少是不受限制的

解释:选D

read(int fd, void *buf, size_t count)函数,把参数fd所指的文件传送count个字节到buf指针所指的内存中,成功返回读取的字节数。从函数作用可得,该函数可以从文件中获取字符,故选项A错误;该函数还能用于二进制文件的操作中,所以选项C也错误;选项D,read()函数第三个参数只是请求读取的字节数,而函数所获取的字符多少本身是无限制的。

9、

有如下程序:
#include < iostream >
using namespace std;

class MyClass
{
public:
MyClass(int i = 0)
{
cout << i;
}
MyClass(const MyClass &x)
{
cout << 2;
}
MyClass& operator=(const MyClass &x)
{
cout << 3;
return *this;
}
~MyClass()
{
cout << 4;
}
};

int main()
{
MyClass obj1(1) , obj2(2) , obj3(obj1);
return 0;
}
运行时的输出结果是( )
A 11214444
B 11114444
C 122444
D 11214445
E 121444

解释:选C

MyClass obj1(1) , obj2(2) , obj3(obj1);该语句依次实例化了3个对象,其中obj1(1)、obj2(2)都是调用单参构造函数,依次输出1、2;而obj3(obj1)则调用拷贝构造函数MyClass(const MyClass &x),由于参数为引用类型,所以没有产生临时对象,此时只输出2;最终在程序结束时,3个对象会被依次析构(析构顺序obj3、obj2、obj1),依次输出4、4、4。综上可得,最终的输出结果为:122444。

发布了31 篇原创文章 · 获赞 4 · 访问量 2451

猜你喜欢

转载自blog.csdn.net/weixin_44412429/article/details/95748067
169