1.选择题
1.内联函数在以下场景中最有用的()
A. 当函数代码较长且多层嵌套循环的时候
B. 当函数中有较多的静态变量的时候
C. 当函数代码较小并且被频繁调用的时候
D. 以上都不对
答案:C
- 下列运算符中,在C++语言中不能重载的是:
A. *
B. >=
C. ::
D. delete
答案:C
注解:
不能重载的运算符有: . .* :: ?: sizeof
- 拷贝构造函数的特点是()
A. 该函数名同类名,也是一种构造函数,该函数返回自身引用
B. 该函数只有一个参数,是对某个对象的引用
C. 每个类都必须有一个拷贝初始化构造函数,如果类中没有说明拷贝构造函数,则编译器系统会自动生成一个缺省拷贝构造函数,作为该类的保护成员
D. 拷贝初始化构造函数的作用是将一个已知对象的数据成员值拷贝给正在创建的另一个同类的对象
答案:D
- print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是()
A. const void print();
B. void const print();
C. void print() const;
D. void print(const);
答案:C
解释:
常成员函数指的是const成员函数,因此只需要再函数名后加上const即可,因此选C
而在返回值类型前加const是限定了返回值的改变
- 不能作为重载函数的调用的依据是:
A. 参数个数
B. 参数类型
C. 函数类型
D. 函数名称
答案:C
解释:关于函数重载:函数重载必须是相同的作用域下,拥有相同的函数名,不同的参数类型或参数个数或者不同的参数类型顺序,函数的重载与函数返回值类型无关
- 如果MyClass为一个类,执行”MyClass a[5], *b[6]”语言会自动调用该类构造函数的次数是()
A. 2
B. 5
C. 4
D. 9
答案:B
解释:根据题目中要执行的语句:a[5]是一个数组,其中有5个MyClass对象,因此调用了5次构造函数,*而 b[6] 是一个指针数组,它是一个数组,这个数组中包含了6个对象的地址,但并不是6个对象,因此并没有调用构造函数,因此选B
- 下面的程序输出可能是什么?
class Printer{
public:
Printer(std::string name) {std::cout << name;}
};
class Container{
public:
Container() : b("b"), a("a") {}
Printer a;
Printer b;
};
int main(){
Container c;
return 0;
}
A. 可能是 “ab” 或 “ba”。 依赖于具体的实现
B. 一直都是 “ba”
C. 一直都是 “ab”
答案:C
解释:在初始化列表中初始化的次序与在初始化列表中的顺序无关,仅与成员变量在类中生成的先后顺序保持一致,题目中的成员变量先定义的是a,因此一直都是先初始化a,因此选C
- 在Windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为()?
A. 0
B. 1
C. 2
D. 4
答案:B
- 下面 C++ 程序的运行结果是()
#include<iostream>
#include<string>
using namespace std;
class A {
friend long fun(A s) {
if (s.x < 3) {
return 1;
}
return s.x + fun(A(s.x - 1));
}
public:
A(long a) {
x = a--;
}
private:
long x;
};
int main() {
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += fun(A(i));
}
cout << sum;
return 0;
}
A. 21
B. 15
C. 9
D. 36
答案:B
注意:a–是后置,题目中的x = a–;实际上相当于x=a;
- 以下程序输出是____。
#include <iostream>
using namespace std;
int main(void)
{
const int a = 10;
int * p = (int *)(&a);
*p = 20;
cout<<"a = "<<a<<", *p = "<<*p<<endl;
return 0;
}
A. 编译阶段报错运行阶段报错
B. a = 10, *p = 10
C. a = 20, *p = 20
D. a = 10, *p = 20
E. a = 20, *p = 10
答案:D
解释:
在C++中被const修饰的变量会成为一个常量,还具有替换作用,编译器在编译代码,在程序中看到对常量中的内容读取时,会直接使用常量中的内容替换该常量
2.编程题
简单题:
代码:
class Board {
public:
bool checkWon(vector<vector<int> > board)
{
int row = board.size();
int col = board[0].size();
//每行是否都为1 , 若都为1 ,那么此行的和 == 行数
for (int i = 0; i < row; i++)
{
int sum = 0;
for (int j = 0; j < col; j++)
{
sum += board[i][j];
}
if (sum == col)
{
return true;
}
}
//每列是否都为1 , 若都为1 ,那么此列的和 == 列数
for (int i = 0; i < col; i++)
{
int sum = 0;
for (int j = 0; j < row; j++)
{
sum += board[j][i];
}
if (sum == row)
{
return true;
}
}
//反斜杠方向是否都为1 , 若都为1 ,那么和 == 行数
int sum = 0;
for (int i = 0; i < row; i++)
{
sum += board[i][i];
}
if (sum == row)
{
return true;
}
//斜杠方向是否都为1 , 若都为1 ,那么和 == 行数
sum = 0;
for (int i = 0; i < row; i--)
{
sum += board[i][col-i-1];
}
if (sum == row)
{
return true;
}
return false;
}
};