参考答案和解析
参考答案:正确
更多“析构函数可以是虚函数,构造函数不能定义为虚函数。() ”相关问题
  • 第1题:

    下列关于构造函数和析构函数的描述,错误的是( )。

    A.析构函数中调用虚函数采用静态联编

    B.对虚析构函数的调用可以采用动态联编

    C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数

    D.构造函数可以声明为虚函数


    正确答案:D
    D。【解析】构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。

  • 第2题:

    34、关于虚函数,正确的描述是()

    A.构造函数不能是虚函数     

    B.析构函数不能是虚函数

    C.虚函数可以是友元函数

    D.虚函数可以是静态成员函数


    A

  • 第3题:

    以下叙述正确的是:

    A.构造函数调用虚函数采用动态联编

    B.构造函数可以说明为虚函数

    C.当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数

    D.析构函数必须是虚函数


    D

  • 第4题:

    下面关于构造函数和析构函数的描述,错误的是( )。

    A)析构函数中调用虚函数采用静态联编

    B)对虚析构函数的调用可以采用动态联编

    C)当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数

    D)构造函数可以声明为虚函数


    正确答案:D

  • 第5题:

    构造函数可以定义为虚函数,析构函数不可以定义为虚函数。()


    (1) 构造函数不能为虚函数
    这就要涉及到C++对象的构造问题了,C++对象在三个地方构建:(1)函数堆栈;(2)自由存储区,或称之为堆;(3)静态存储区。无论在那里构建,其过程都是两步:首先,分配一块内存;其次,调用构造函数。好,问题来了,如果构造函数是虚函数,那么就需要通过vtable 来调用,但此时面对一块 raw memeory,到哪里去找 vtable 呢?毕竟,vtable 是在构造函数中才初始化的啊,而不是在其之前。因此构造函数不能为虚函数。
    (2)析构函数可以是虚函数,且常常如此
    这个就好理解了,因为此时 vtable 已经初始化了;况且我们通常通过基类的指针来销毁对象,如果析构函数不为虚的话,就不能正确识别对象类型,从而不能正确销毁对象。