下列描述中正确的是( )。A.构造函数可以为虚函数,析构函数不可以为虚函数B.构造函数不可以为虚函数,析构函数可以为虚函数C.构造函数可以为虚函数,析构函数可以为虚函数D.构造函数不可以为虚函数,析构函数不可以为虚函数

题目

下列描述中正确的是( )。

A.构造函数可以为虚函数,析构函数不可以为虚函数

B.构造函数不可以为虚函数,析构函数可以为虚函数

C.构造函数可以为虚函数,析构函数可以为虚函数

D.构造函数不可以为虚函数,析构函数不可以为虚函数


相似考题
更多“下列描述中正确的是( )。A.构造函数可以为虚函数,析构函数不可以为虚函数B.构造函数不可以为虚函 ”相关问题
  • 第1题:

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

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

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

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

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


    A

  • 第2题:

    231、下列函数中,不可以作为虚函数的是()。

    A.析构函数

    B.成员函数

    C.普通函数

    D.构造函数


    普通函数;构造函数;静态成员函数

  • 第3题:

    以下叙述正确的是:

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

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

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

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


    D

  • 第4题:

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


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

  • 第5题:

    下列函数中,不可以作为虚函数的是()。

    A.析构函数

    B.成员函数

    C.普通函数

    D.构造函数


    C