全部来自 AI 原创生成并经逐题审校的题目,带 精品 标记的为 AI 复审通过。整卷生成请去组卷。
有如下C++代码: vector<int> v; for(int i=1;i<=5;i++) v.push_back(i); vector<int>::iterator it = v.begin(); v.insert(v.begin(), 0); cout << *it << endl; 若向量为空时 capacity 为 0,插入已存在元素时容量不足则重新分配存储,原迭代器全部失效。执行后输出结果是什么? A. 1 B. 0 C. 程序行为未定义 D. 编译错误
登录后查看答案
设类 V 的成员函数为 `V& operator=(const V& rhs) { value = rhs.value + 1; return *this; }`,且构造函数 `V(int x)` 将 x 存入成员 value。执行 `V a(0), b(0), c(4); a = b = c;` 后,按 (a.value, b.value, c.value) 排列的结果是: A. (5, 4, 4) B. (6, 5, 4) C. (4, 5, 6) D. (6, 6, 4)
阅读以下声明: class Base { public: virtual void render() const = 0; }; class Mid : public Base { public: void render() {} }; class Leaf : public Mid { public: void render() const override {} }; 下列判断正确的是: A. Base 与 Mid 是抽象类,Leaf 不是抽象类 B. Base 是抽象类,Mid 与 Leaf 都不是抽象类 C. Base、Mid 与 Leaf 都是抽象类 D. Base 不是抽象类,Mid 与 Leaf 是抽象类
有如下类模板定义:template<typename T> class Box { T data; public: Box(T d):data(d){} T get(){return data;} }; 下列关于该类模板使用的语句中,正确的是( ) A. Box b(10); B. Box<int> b(10); b.get() 返回 int 型数据 C. class Box<int> b(10); D. Box<double> b(10); b.get() 返回 int 型数据
在 C++ 中,若要将加法运算符重载为类 Complex 的友元函数,使其支持 c1 + c2(c1、c2 均为 Complex 对象),下列函数声明正确的是 A. friend Complex operator+(Complex &a, Complex &b); B. Complex operator+(Complex &a); C. Complex operator+(Complex a, Complex b); D. friend Complex add(Complex &a, Complex &b);
某类 Meter 定义了:Meter& operator++(){ v += 10; return *this; } 与 Meter operator++(int){ Meter t(*this); v += 3; return t; },其中成员 v 初值为 5,且类未重载 operator--。执行语句 Meter a(5); Meter b = ++a; Meter c = a++; 后,b.v = ____ ,c.v = ____ ,a.v = ____ 。
某类 Step 重载了自增运算符:前置版本为 Step& operator++(){ x += 3; return *this; },后置版本为 Step operator++(int){ Step t(*this); x -= 2; return t; }。设对象 s 初始时 x = 10,依次执行语句 Step a = s++; Step b = ++s; 则 a.x = ____,b.x = ____。
已知 `struct Base { int value; }; struct Derived : Base { int value; };`,并有对象 `Derived d;`。在 `Derived` 中同名成员隐藏了 `Base` 的 `value`。若要通过 `d` 明确访问被隐藏的基类成员,应选哪一项? A. `d.value` B. `d.Base::value` C. `d.Derived::value` D. `Base::value`
阅读代码:struct Base { int level = 7; }; struct Derived : Base { int level = 11; }; Derived d; Base& r = d; d.level = 20; d.Base::level = 30; 按顺序填写表达式 d.level、r.level、d.Base::level 的值:___。
设有类 Timer,其中重载了自增运算符:Timer& operator++(){ seconds++; return *this; } 与 Timer operator++(int){ Timer t(*this); seconds++; return t; }。请填写:上述第一个函数重载的是____(填“前置”或“后置”)自增运算符,第二个函数参数中的 int 起到____(填“区分前置与后置”或“参与加法运算”)的作用;若执行 ++t1,则调用的运算符函数返回值类型为____。
在 C++ 中,基类 Base 的析构函数未声明为 virtual,派生类 Derived 的析构函数中包含释放堆内存的语句。程序中执行语句 Base *p = new Derived; 后调用 delete p;,此时通过基类指针删除派生类对象,由于析构函数不是虚函数,实际只会执行____类的析构函数,导致派生类中申请的资源未被释放。为使 delete 通过基类指针时能正确调用派生类析构函数,应在基类析构函数声明前加上关键字____。因此,当一个类作为多态基类使用时,其析构函数应当声明为____。
已知类 Base 中定义了成员函数 void show(),派生类 Derived 中又定义了同名成员函数 void show()(参数相同)。在 Derived 的成员函数中直接写 show(),调用的是哪一个函数? A. Base 中的 show() B. Derived 中的 show() C. 两个都会被调用 D. 编译报错,必须写 Base::show()
判断:在 C++ 中,基类 Base 的析构函数未声明为 virtual。某函数中执行 Base* p = new Derived; delete p; 若 Derived 的析构函数负责释放其成员申请的内存,则只要 Derived 析构函数自身正确释放了资源,就不会发生资源泄漏。
基类 B 声明了纯虚函数 virtual void f(int) = 0;。派生类 D 若只声明 void f(double),即使函数名相同,也算实现了 B 的纯虚函数,因此 D 不再是抽象类。判断该说法是否正确。
某程序中定义类 A:其静态成员 int A::count = 0;构造函数体执行 ++count;,析构函数体执行 --count;。主函数中有语句:A arr[3]; A *p = arr; p++; A *q = new A; delete q;。则执行到 delete q; 之后,count 的值为____;程序结束时,析构函数总共被调用的次数为____。
阅读以下C++程序,写出屏幕输出的完整内容(按顺序写出每个字符,不留空格)。已知:全局对象在main函数之前构造,静态局部对象在首次执行到定义处时构造、在main函数结束后于自动局部对象之后析构,局部对象按构造的逆序析构。 #include <iostream> using namespace std; class T { int num; public: T(int n):num(n){ cout<<"+"<<num; } ~T(){ cout<<"-"<<num; } }; T g(1); int main(){ T a(2); static T b(3); { T c(4); } return 0; } 则程序输出的完整内容为____。
阅读代码,判断在类外函数中,哪些语句可以通过对象 v 合法执行。 class Vault { int code; public: void set(int x) { code = x; } int read() const { return code; } private: void reset() { code = 0; } public: void clear() { reset(); } }; Vault v; ① v.set(7); ② v.read(); ③ v.code; ④ v.reset(); ⑤ v.clear(); A. ①②⑤ B. ①②④⑤ C. ①③⑤ D. ②③④
判断:设类 T 的定义中只声明并定义了一个带参数的构造函数 T(int x),未声明任何其他构造函数。则语句 T obj; 无法通过编译。
判断:对于类 X,如果程序员已定义了一个带参数的构造函数 X(int),则编译器仍会为 X 自动生成一个无参的默认构造函数,使得语句 X obj; 能够编译通过。
已定义 `int x = 4; int y = 9; int& r = x;`。有人认为执行 `r = y;` 后,`r` 会改为引用 `y`,而 `x` 的值不变。该说法正确吗?