GESP C++ 6级 2026.06
下列关于 C++ 中继承和多态的描述中,错误的是( )。
通过基类指针调用虚函数时,会根据对象实际类型决定调用版本
基类析构函数常声明为虚函数,以便通过基类指针正确释放派生类对象。
派生类可以重写基类中的虚函数
构造函数可以声明为 virtual ,以便在构造对象时实现动态绑定
下列代码中, d1->work(); 和 d2->work(); 输出不同结果的主要原因是( )。
class Device {
public:
virtual void work() {
cout work();
d2->work();
delete d1;
delete d2;
return 0;
}
Printer 和 Scanner 使用了相同的构造函数
work() 是虚函数,且 d1 和 d2 实际指向不同派生类对象,发生动态绑定。
d1 和 d2 是不同的指针变量
程序中使用了 delete 释放对象
下面代码在 main() 中有一行会导致编译错误,请找出来。
class Student {
public:
Student(string n, int s) : name(n), score(s) {}
string getName() {
return name;
}
void setScore(int s) {
score = s;
}
private:
string name;
int score;
};
int main() {
Student stu("Tom", 85);
cout << stu.getName(); // ①
stu.setScore(90); // ②
stu.score = 100; // ③
cout << stu.getName(); // ④
return 0;
}
第 ① 行
第 ② 行
第 ③ 行
第 ④ 行
某文本编辑器把用户输入的字符依次压入栈 S 。用户依次输入 X, Y, Z, W 后,连续执行两次撤销操作。每次撤销都会弹出栈顶一个字符。此时栈从栈底到栈顶的内容是( )。
X Y
X Y Z
Y Z
X Z
假设循环队列数组长度为 N = 7 ,队空判断条件为 front == rear 。入队和出队操作如下:
const int N = 7;
int q[N];
int front = 3, rear = 3;
void enqueue(int x) {
q[rear] = x;
rear = (rear + 1) % N;
}
void dequeue() {
front = (front + 1) % N;
}
依次执行:
enqueue(10);
enqueue(20);
enqueue(30);
dequeue();
enqueue(40);
dequeue();
enqueue(50);
最终 (front, rear) 的值是( )
(5, 1)
(4, 0)
(5, 0)
(3, 1)
以下函数 check() 用于判断一棵二叉树是否为( )。
bool check(TreeNode* root) {
if (!root) return true;
queue q;
q.push(root);
bool hasNull = false;
while (!q.empty()) {
TreeNode* cur = q.front();
q.pop();
if (cur == nullptr) {
hasNull = true;
} else {
if (hasNull) return false;
q.push(cur->left);
q.push(cur->right);
}
}
return true;
}
满二叉树
完全二叉树
二叉搜索树
平衡二叉树
以下代码实现了二叉树的哪种遍历方式?。
void traverse(TreeNode* root) {
if (root == NULL) return;
cout val left);
traverse(root->right);
}
前序遍历
中序遍历
后序遍历
层序遍历
已知一棵二叉树的先序遍历序列为 ABDEHCFG,中序遍历序列为 DBHEAFCG,则该二叉树的后序遍历序列为( )。
DHEBFGCA
DEHBFGCA
HDEBFCGA
DHEBGFCA
有 个字符,它们出现的次数分别为: ,现在用哈夫曼编码为这些字符编码,最小加权路径长度 WPL 的值为( )。
对 个不同符号进行哈夫曼编码。若生成的哈夫曼树共有 个结点,则 的值是( )。
