GESP C++ 6级 2025.09
下列关于类的说法,错误的是 ( )。
构造函数不能声明为虚函数,但析构函数可以。
函数参数如声明为类的引用类型,调用时不会调用该类的复制构造函数。
静态方法属于类而不是某个具体对象,因此推荐用 类名::方法(...) 调用。
不管基类的析构函数是否是虚函数,都可以通过基类指针/引用正确删除派生类对象。
假设变量 veh 是类 Car 的一个实例,我们可以调用 veh.move(),是因为面向对象编程有( )性质。
class Vehicle {
private:
string brand;
public:
Vehicle(string b) : brand(b) {}
void setBrand(const string &b) { brand = b; }
string getBrand() const { return brand; }
void move() const {
cout << brand << " is moving..." << endl;
}
};
class Car : public Vehicle {
private:
int seatCount;
public:
Car(string b, int seats) : Vehicle(b), seatCount(seats) {}
void showInfo() const {
cout << "This car is a " << getBrand()
<< " with " << seatCount << " seats." << endl;
}
};
继承 Inheritance
封装 Encapsulation
多态 Polymorphism
链接 Linking
下面代码中 v1 和 v2 调用了相同接口 move(),但输出结果不同,这体现了面向对象编程的( )特性。
class Vehicle {
private:
string brand;
public:
Vehicle(string b) : brand(b) {}
void setBrand(const string& b) { brand = b; }
string getBrand() const { return brand; }
virtual void move() const {
cout move();
v2->move();
delete v1;
delete v2;
return 0;
}
继承 (Inheritance)
封装 (Encapsulation)
多态 (Polymorphism)
链接 (Linking)
栈的操作特点是( )。
先进先出
先进后出
随机访问
双端进出
循环队列常用于实现数据缓冲。假设一个循环队列容量为 (即最多存放 个元素,留一个位置区分空与满),依次进行操作:入队数据 、、,出队 个数据,再入队数据 和 ,此时队首到队尾的元素顺序是 ( )。
[2, 3, 4, 5]
[1, 2, 3, 4]
[3, 4, 5, 2]
[2, 3, 5, 4]
以下函数 createTree() 构造的树是什么类型?
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* createTree() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
return root;
}
满二叉树
完全二叉树
二叉排序树
其他都不对
已知二叉树的中序遍历是 [D, B, E, A, F, C],先序遍历是 [A, B, D, E, C, F]。请问该二叉树的后序遍历结果是( )。
[D, E, B, F, C, A]
[D, B, E, F, C, A]
[D, E, B, C, F, A]
[B, D, E, F, C, A]
完全二叉树可以用数组连续高效存储,如果节点从 开始编号,则对有两个孩子节点的节点 ,( )。
左孩子位于 ,右孩子位于
完全二叉树的叶子节点可以出现在最后一层的任意位置
所有节点都有两个孩子
左孩子位于 ,右孩子位于
设有字符集 ,其出现频率分别为 。哈夫曼算法构造最优前缀编码时,以下哪一组可能是对应的哈夫曼编码?(非叶子节点左边分支记作 ,右边分支记作 ,左右互换不影响正确性)。
;;;;;
;;;;;
;;;;;
;;;;;
下面代码生成格雷编码,则横线上应填写( )。
vector grayCode(int n) {
if (n == 0) return {"0"};
if (n == 1) return {"0", "1"};
vector prev = grayCode(n - 1);
vector result;
for (string s : prev) {
result.push_back("0" + s);
}
for (_______________) { // 在此处填写代码
result.push_back("1" + prev[i]);
}
return result;
}
int i = 0; i < prev.size(); i++
int i = prev.size() - 1; i >= 0; i--
auto s : prev
int i = prev.size()/2; i < prev.size(); i++
