Q 31 :
题目:
分析一下这段程序的输出:
#include<iostream>
using namespace std;
class B{
public:
B(){
cout << "default constructor" << " ";
}
~B(){
cout << "destructed" << " ";
}
B(int i):data(i){
cout << "constructed by parameter" << data << " ";
}
private:
int data;
};
B Play(B b){
return b;
}
int main(int argc, char *argv[]){
B temp = Play(5);
return 0;
}
答案:
constructed by parameter5
destructed
destructed
解答:
考察赋值运算顺序以及拷贝构造函数。
1. B temp = Play(5)从右向左执行。
2. 先将"5"转为形式参数B的类型,之后调用B(int i)打印
"constructed by parameter"。
4. B temp调用B的默认浅拷贝构造函数,完成赋值,由于拷贝构
造函数没有输出,所以没有打印东西。
6. Play()生命周期结束后,b析构打印"destructed"。
7. main()生命周期结束后,temp析构打印"destructed"。
Q 32 :
题目:
int i=10, j=10, k=3;
k*=i+j;
k最后的值是?
答案:
60
解答:
考察运算符优先级。
1. +优先级高于*=,等价于k = k * (i +j)。
Q 33 :
题目:
#include命令的功能是:
答案:
在命令处插入一个文本文件
解答:
1. "#include"在命令处插入,插入文本过程为预处理过程。
Q 34 :
题目:
有一个类A,其数据成员如下:
class A {
private:
int a;
public:
const int b;
float* &c;
static const char* d;
static double* e;
};
则构造函数中,成员变量一定要通过初始化列表来初始化的是: