首页 > 试题广场 >

关于下面 C++ 代码的执行结果说法正确的是() #incl

[不定项选择题]
关于下面 C++ 代码的执行结果说法正确的是()
#include <iostream>

class Test {
public:
    Test() = default;
    ~Test() {
        std::cout << "~Test" << std::endl;
    }
    void print1() {
        std::cout << "print1" << std::endl;
    }
    virtual void print2() {
        std::cout << "print2" << std::endl;
    }
};

int main() {
    {
        Test *t = nullptr;
        t->print1();
        t->print2();
    }
    std::cout << "I'm OK" << std::endl;
    return 0;
}
  • 程序输出中包含 ~Test
  • 程序使用空指针调用 print1,因此会崩溃
  • 程序使用空指针调用 print2,因此会崩溃
  • 如果将 virtual 去掉,那么程序就能正常执行
10q头像 10q
A:析构函数需要先有对象才能析构,代码中t为空指针并未创建对象;
B:类中的普通函数如果未涉及类中成员,可以用空指针调用;
C:调用虚函数需要有虚函数表,虚函数表指针存储在对象内存中,此段代码没有对象;
D:去掉virtual就是普通函数且不涉及类中成员
发表于 2025-11-04 15:01:43 回复(0)
看不懂
发表于 2025-09-06 00:39:48 回复(0)
个人理解 A因为有虚函数所以程序不能执行,就没有析构函数 B只要不涉及到成员属性,空指针可以调用,底层原理记不清了,大概就是指针不属于类的属性,它只在使用的时候产生。 C选项虚函数要通过虚函数表调用,空指针拿不到。 D 虚函数
发表于 2025-10-29 06:34:07 回复(0)
这题确实厉害
发表于 2025-09-30 09:08:29 回复(0)
纯语文题啊,从选项的语气里推测出来选CD
发表于 2025-09-28 08:54:38 回复(0)
匪夷所思?
发表于 2025-08-12 18:13:14 回复(0)