第1套(基础语法)
一、单选题
下列哪个是C++合法的变量名?
A. 3score
B. _name
C. case
D. a+b
表达式 5 / 2 的结果是:
A. 2
B. 2.5
C. 3
D. 2.0
二、判断题
const int a; 是合法的声明方式。( )main() 函数的返回类型必须是 int。( )
三、多选题
下列哪些是C++基本数据类型?
A. string
B. bool
C. array
D. double
下列哪些运算符优先级高于 +?
A. *
B. <<
C. ++(后置)
D. ()
四、填空题
输出数组第三个元素:
int arr[5] = {10,20,30,40,50};
cout << ______;
完成交换变量值的代码:
int a=5, b=10, temp;
______ = a;
a = b;
b = ______;
第2套(运算符优先级)
一、单选题
表达式 3 + 4 << 2 的值是:
A. 28
B. 19
C. 11
D. 7
cout << (true && false || true); 输出:
A. 0
B. 1
C. 编译错误
D. 随机值
二、判断题
1 <= 2 <= 3 的运算结果是 true。( )a += b; 等价于 a = a + b;。( )
三、多选题
具有短路特性的运算符:
A. &&
B. ||
C. &
D. |
下列哪些表达式值为4?
A. sizeof("abcd")
B. strlen("abcd")
C. 10 >> 2
D. 7 & 12
四、填空题
表达式 5 | 3 的二进制结果是 ______。求a的平方根:
#include
double a=9;
cout << ______;
第3套(函数与重载)
一、单选题
函数重载的依据不包括:
A. 参数个数
B. 参数类型
C. 返回值类型
D. const修饰符
默认参数必须定义在:
A. 函数声明
B. 函数定义
C. 声明或定义均可
D. 函数调用处
二、判断题
函数递归调用必须有终止条件。( )inline 关键字保证函数一定会内联展开。( )
三、多选题
可能引发二义性的情况:
A. 重载函数参数隐式转换
B. 缺省参数与无参数调用
C. 函数模板特化
D. 虚函数重写
函数传参方式包括:
A. 值传递
B. 引用传递
C. 指针传递
D. 寄存器传递
四、填空题
定义无返回值的函数:
______ func() { }
调用函数模板:
template
T max(T a, T b) { return a>b?a:b; }
cout << max(______);
第4套(指针与引用)
一、单选题
下列哪个操作符用于获取变量地址?
A. *
B. &
C. ->
D. #
关于引用,说法正确的是:
A. 引用必须初始化后可以修改指向
B. 引用可以为空(nullptr)
C. 引用本质是指针常量
D. 引用占用独立内存空间
二、判断题
int* p; *p = 10; 是安全的代码。( )函数参数传递引用可以避免拷贝大对象。( )
三、多选题
下列哪些是合法操作?
A. int& r = 5;
B. const int& r = 5;
C. int* p = new int(10);
D. int* p = 0x1234;
指针与引用的区别包括:
A. 引用必须初始化,指针可以不初始化
B. 引用可以重新指向其他变量
C. 指针支持算术运算,引用不支持
D. sizeof(引用)返回变量大小
四、填空题
通过指针访问结构体成员:
struct Node { int val; };
Node* p = new Node();
p->val = 10;
cout << ______;
动态分配整型数组并释放:
int* arr = ______ int[10];
delete[] ______;
第5套(类与对象基础)
一、单选题
类中默认访问权限为 private 的成员是:
A. 数据成员
B. 公有成员函数
C. 保护成员函数
D. 静态成员
构造函数的特点不包括:
A. 可以重载
B. 没有返回值
C. 必须显式调用
D. 名称与类名相同
二、判断题
每个类必须自定义默认构造函数。( )const 成员函数可以修改类的数据成员。( )
三、多选题
类成员的初始化方式包括:
A. 构造函数初始化列表
B. 构造函数内赋值
C. 直接声明时赋值(C++11)
D. 全局作用域初始化
关于静态成员,正确的有:
A. 属于类而非对象
B. 可以被所有对象共享
C. 静态函数不能访问非静态成员
D. 静态数据成员需类外初始化
四、填空题
定义类的公有成员函数:
class Test {
public:
______ print() { cout << "Test"; }
};
对象数组初始化:
class A { public: A(int x) {} };
A arr[3] = { ______ };
第6套(继承与多态)
一、单选题
实现运行时多态的关键字是:
A. virtual
B. static
C. const
D. friend
派生类继承基类的方式为 private 时:
A. 基类公有成员在派生类中为 private
B. 基类保护成员在派生类中为 public
C. 基类私有成员可被派生类访问
D. 不影响派生类的继承权限
二、判断题
派生类构造函数会先调用基类构造函数。( )虚函数必须通过指针或引用调用才能体现多态。( )
三、多选题
多态成立的条件包括:
A. 基类有虚函数
B. 派生类重写虚函数
C. 通过基类指针/引用调用
D. 函数返回类型必须一致
关于纯虚函数,正确的有:
A. virtual void func() = 0;
B. 含纯虚函数的类是抽象类
C. 可以定义纯虚函数的实现
D. 派生类必须实现所有纯虚函数
四、填空题
定义抽象基类:
class Shape {
public:
virtual ______ area() = 0;
};
动态绑定示例:
Base* obj = new Derived();
obj->func();
第7套(模板基础)
一、单选题
模板参数推导失败的情况是:
A. template
B. template
C. template
D. template
类模板的显式特化声明语法是:
A. template<> class MyClass
B. class MyClass
C. template
D. template
二、判断题
函数模板必须显式指定模板参数才能调用。( )类模板的成员函数只有在被调用时才会实例化。( )
三、多选题
模板元编程可能涉及的技术包括:
A. 递归模板实例化
B. 类型萃取(type traits)
C. 虚函数重载
D. SFINAE
关于模板特化,正确的有:
A. 全特化需要所有模板参数具体化
B. 偏特化允许部分参数保持模板形式
C. 函数模板支持偏特化
D. 特化版本优先级高于通用模板
四、填空题
定义函数模板求最大值:
template <______ T>
T max(T a, T b) { return a > b ? a : b; }
使用类模板创建整型栈:
______
s.push(10);
第8套(STL容器)
一、单选题
vector 在什么情况下迭代器会失效?
A. 插入元素后容量未满
B. 删除中间元素
C. 调用 front()
D. 使用 reserve()
下列哪个容器不提供随机访问迭代器?
A. deque
B. list
C. array
D. string
二、判断题
map 的 operator[] 访问不存在的键时会自动插入新元素。( )sort 算法可以直接对 list 容器进行排序。( )
三、多选题
需要元素可比较大小的容器/算法:
A. set
B. unordered_map
C. sort()
D. priority_queue
关于迭代器,正确的有:
A. begin() 返回指向第一个元素的迭代器
B. end() 指向最后一个元素的下一个位置
C. rbegin() 是反向迭代器的起点
D. 所有容器都支持 += 操作
四、填空题
初始化含三个元素的 vector:
vector
遍历 map 的键值对:
for (auto& ______ : m) {
cout << pair.first;
}
第9套(异常处理)
一、单选题
下列哪个异常处理顺序是正确的?
A. catch(...) → catch(exception&)
B. catch(int) → catch(...)
C. catch(exception&) → catch(int)
D. catch(exception) → catch(exception&)
noexcept 修饰符的作用是:
A. 保证函数不抛出异常
B. 声明函数可能抛出的异常类型
C. 表示函数不会失败
D. 进行编译期异常检查
二、判断题
构造函数中抛出的异常会导致对象析构函数被调用。( )throw; 语句可以重新抛出当前异常。( )
三、多选题
可能导致资源泄漏的情况:
A. 异常抛出前未释放 new 分配的内存
B. 使用智能指针
C. 文件操作未在异常处理中关闭
D. 使用 vector 容器
标准异常类继承体系包括:
A. exception
B. runtime_error
C. logic_error
D. out_of_range
四、填空题
抛出整数异常:
throw ______;
捕获所有异常:
try { /* code */ }
catch (______) { /* ... */ }
第10套(动态内存管理)
一、单选题
unique_ptr 的正确使用方式是:
A. unique_ptr
B. unique_ptr
C. unique_ptr
D. return unique_ptr
内存泄漏的根本原因是:
A. 使用 malloc
B. 未配对使用 new[]/delete
C. 失去对已分配内存的引用
D. 多线程竞争
二、判断题
delete 空指针是安全的。( )shared_ptr 的循环引用会导致内存泄漏。( )
三、多选题
智能指针类型包括:
A. auto_ptr(已废弃)
B. unique_ptr
C. weak_ptr
D. raw_ptr
正确释放资源的方式:
A. delete 匹配 new
B. delete[] 匹配 new[]
C. free 匹配 malloc
D. 不手动释放智能指针管理的资源
四、填空题
创建共享指针:
auto p = ______
防止循环引用:
class B;
class A {
public:
______ b_ptr;
};