2025年9月计算机二级C++语言程序设计——选择题打卡Day9

C++选择题打卡Day9解析

备考计算机二级 C++ 程序设计考试,选择题是不容忽视的重要部分。

今天为大家带来 10 道难点选择题,聚焦易错知识点,助力突破薄弱环节。

1、有如下程序:

#include<iostream>
using namespace std;
class Base {
public:
    virtual void func() { cout<<"Base"; }
};
class Derived : public Base {
public:
    void func(int x) { cout<<"Derived"; }
};
int main() {
    Base *p=new Derived;
    p->func();
    delete p;
    return 0;
}

运行时的输出结果是( )
A. Base
B. Derived
C. 无输出
D. 编译错误

答案:A

分析:Derived 的 func (int) 与 Base 的 func () 不是重写(参数不同),p->func () 调用基类版本,输出 Base,故选 A。

2、下列关于多态性的叙述中,错误的是( )
A. 多态性是指同名函数对应多种实现版本
B. 多态性分为编译时多态和运行时多态
C. 函数重载实现的是运行时多态
D. 虚函数实现的是运行时多态

答案:C

分析:函数重载是编译时多态(静态多态),C 选项错误;A、B、D 均正确,故选 C。

3、有如下程序:

#include<iostream>
using namespace std;
class A {
public:
    A() { cout<<"A"; }
    A(A&) { cout<<"A&"; }
};
class B : public A {
public:
    B() { cout<<"B"; }
    B(B&) { cout<<"B&"; }
};
int main() {
    B b1;
    B b2(b1);
    return 0;
}

运行时的输出结果是( )
A. ABAB&
B. ABA&B&
C. ABB&
D. ABBA&

答案:B

分析:创建 b1:A 构造(A)→B 构造(B);b2 (b1):A 拷贝构造(A&)→B 拷贝构造(B&),输出 ABA&B&,故选 B。

4、下列关于虚析构函数的叙述中,正确的是( )
A. 虚析构函数可以避免内存泄漏
B. 基类的析构函数必须是虚函数
C. 派生类的析构函数必须是虚函数
D. 虚析构函数不能有参数

答案:A

分析:虚析构函数确保删除基类指针时调用派生类析构,避免内存泄漏,A 正确;B、C 错误(非必须);D 正确但不是核心作用,故选 A。

5、有如下程序:

#include<iostream>
using namespace std;
template <class T>
T sum(T *a, int n) {
    T s=0;
    for(int i=0;i<n;i++) s+=a[i];
    return s;
}
int main() {
    int a[5]={1,2,3,4,5};
    cout<<sum(a,5)<<endl;
    return 0;
}

运行时的输出结果是( )
A. 15
B. 0
C. 编译错误
D. 不确定

答案:A

分析:模板函数 sum 计算数组和,1+2+3+4+5=15,故选 A。

6、下列关于异常处理的叙述中,正确的是( )
A. try 块中可以抛出任何类型的异常
B. 一个 try 块只能对应一个 catch 块
C. catch 块必须放在 try 块之前
D. 异常处理机制会自动释放动态分配的内存

答案:A

分析:try 块可抛出任何类型异常,A 正确;一个 try 可对应多个 catch,B 错误;catch 在 try 之后,C 错误;需手动释放内存,D 错误,故选 A。

7、有如下程序:

#include<iostream>
using namespace std;
class MyClass {
public:
    int x;
    MyClass(int a) : x(a) {}
    MyClass operator+(MyClass &b) {
        return MyClass(x + b.x);
    }
};
int main() {
    MyClass obj1(10), obj2(20);
    MyClass obj3 = obj1 + obj2;
    cout<<obj3.x<<endl;
    return 0;
}

运行时的输出结果是( )
A. 30
B. 20
C. 10
D. 0

答案:A

分析:重载 + 运算符实现对象成员相加,10+20=30,故选 A。

8、下列关于静态数据成员的叙述中,正确的是( )
A. 静态数据成员不能被类的对象访问
B. 静态数据成员不属于某个具体的对象
C. 静态数据成员不能被继承
D. 静态数据成员的类型可以是该类的类型

答案:B

分析:静态数据成员属于类,为所有对象共享,B 正确;A 错误(可通过对象或类名访问);C 错误(可继承);D 错误(不完整类型),故选 B。

9、有如下程序:

#include<iostream>
using namespace std;
int &f(int &x) {
    x++;
    return x;
}
int main() {
    int a=1;
    f(a)=10;
    cout<<a<<endl;
    return 0;
}

运行时的输出结果是( )
A. 1
B. 2
C. 10
D. 11

答案:C

分析:f 函数返回 a 的引用,f (a)=10 等价于 a=10,输出 10,故选 C。

10、下列关于模板实参推断的叙述中,正确的是( )
A. 模板实参推断是指编译器根据实参自动确定模板形参的类型
B. 所有模板实参都必须显式指定
C. 模板实参推断适用于类模板和函数模板
D. 模板实参推断可以推断出默认参数

答案:A

分析:模板实参推断是编译器根据实参确定模板形参类型,A 正确;可省略部分实参,B 错误;仅适用于函数模板,C 错误;不能推断默认参数,D 错误,故选 A。

希望这 10 道题能帮助大家对 C++ 难点知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)

夸克网盘分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值