C++练习应对考试

Q 1

1. 类 A 是一个包含纯虚函数的抽象类,下列说明语法正确的是______
A. A a;				B. A f( );
C. A &f( );			D. A f(A);
语法正确的选项是 C. A &f( )。

选项 A 中的 A a; 是错误的,因为抽象类无法被实例化。

选项 B 中的 A f( ); 也是错误的,因为抽象类不能用于定义函数。

选项 D 中的 A f(A); 也是错误的,因为抽象类不能作为函数的参数类型。

选项 C 中的 A &f( );是正确的,它声明了一个返回类型为 A 引用的函数。在派生类中,可以通过重写该纯虚函数来实现具体的功能。

Q 2

 使用 exit 退出程序 ,关于对象自动析构,哪个叙述正确______
A.不析构全局对象但析构局部对象
B.析构全局对象但不析构局部对象
C.全局对象和局部对象都不析构
D.全局对象和局部对象都析构
选项 B. 析构全局对象但不析构局部对象 是正确的。

当程序执行 exit 函数时,会终止程序的执行并退出。在退出之前,全局对象会被自动析构,而局部对象则不会被自动析构。

全局对象是在程序开始时创建的,它们存在于整个程序的生命周期中。因此,当程序退出时,会自动调用全局对象的析构函数进行资源的清理。

而局部对象是在函数或代码块中创建的,它们的生命周期仅限于所在的函数或代码块。当程序退出时,由于局部对象的作用域已经结束,它们不再存在,因此不会触发析构函数的调用。

所以,选项 B. 析构全局对象但不析构局部对象 是正确的描述。

Q 3

对于如下程序:
#include  
struct A {
A( ) { printf(“别理我”);A(cha r *s) { printf(s); }
} a(“烦着呢”);
A f( ) { printf(“一边去”);  return a; } 
void main(void) { A f( ); }
关于程序的输出 ,哪个叙述是正确的
A. 输出为 “烦着呢 ” ;	B. 输出为 “烦着呢 别理我”;
C. 输出为 “一边去 ”;	D. 输出为 “烦着呢 一边去”;
答案是A
这里要注意main里面是函数定义,不是创建了一个新的对象

Q 4

对于 int x;如下运算错误的是______
A. x++ ++			B.++  ++x
C. (++x)++			D. ++ (++x)
C++中,后置递增运算符 ++ 的操作数必须是左值。然而,表达式 (++x) 是一个右值,它返回的是 x 增加后的临时值,而不是一个左值。因此,对右值 (++x) 使用后置递增运算符 (++x)++ 是非法的,属于语法错误。

选项 A. x++ ++ 也是错误的运算。在 C++ 中,两个递增运算符 ++ 不能连续出现,因为每个递增运算符都会返回一个右值,不能再应用递增运算符。

选项 B. ++ ++x 是合法的运算。它首先对 x 进行前置递增,然后再对递增后的 x 进行一次前置递增。这是合法的操作。

选项 D. ++ (++x) 也是合法的运算。它首先对 x 进行前置递增,然后再对递增后的 x 进行一次前置递增。这也是合法的操作。

因此,选项 C. (++x)++ 是错误的运算。

Q 5

  对于 int x ,   int &y 最好引用如下哪个表达式______
A. x+=3;			B. x+4 ;
C. x++;			D. (--x)--
最好引用的表达式是 A. x += 3。

选项 A. x += 3 是一个复合赋值表达式,它将 x 的值增加 3,并将结果赋值给 x。通过引用这个表达式,可以修改原始的 x 变量的值。

选项 B. x + 4 是一个算术表达式,它计算 x 加 4 的结果,但它并不会修改原始的 x 变量的值。因此,引用这个表达式没有意义。

选项 C. x++ 是一个后置递增运算符,它会将 x 的值增加 1,但它返回的是递增前的 x 值,而不是递增后的值。因此,通过引用这个表达式无法修改原始的 x 变量的值。

选项 D. (--x)-- 是一个非常不常见的表达式,它包含了连续的递减运算符和递增运算符。这是一个不推荐使用的表达式,因为它的行为在不同的编译器中可能会有所不同。在某些编译器中,这种表达式可能导致未定义的行为。因此,不建议引用这个表达式。

因此,选项 A. x += 3 是最好引用的表达式,它可以修改原始的 x 变量的值。

你可能感兴趣的:(c++,c++,算法,java)