网友您好, 请在下方输入框内输入要搜索的题目:
题目内容
(请给出正确答案)
构造函数可以定义为虚函数,析构函数不可以定义为虚函数。()
参考答案和解析
(1) 构造函数不能为虚函数
这就要涉及到C++对象的构造问题了,C++对象在三个地方构建:(1)函数堆栈;(2)自由存储区,或称之为堆;(3)静态存储区。无论在那里构建,其过程都是两步:首先,分配一块内存;其次,调用构造函数。好,问题来了,如果构造函数是虚函数,那么就需要通过vtable 来调用,但此时面对一块 raw memeory,到哪里去找 vtable 呢?毕竟,vtable 是在构造函数中才初始化的啊,而不是在其之前。因此构造函数不能为虚函数。
(2)析构函数可以是虚函数,且常常如此
这个就好理解了,因为此时 vtable 已经初始化了;况且我们通常通过基类的指针来销毁对象,如果析构函数不为虚的话,就不能正确识别对象类型,从而不能正确销毁对象。
这就要涉及到C++对象的构造问题了,C++对象在三个地方构建:(1)函数堆栈;(2)自由存储区,或称之为堆;(3)静态存储区。无论在那里构建,其过程都是两步:首先,分配一块内存;其次,调用构造函数。好,问题来了,如果构造函数是虚函数,那么就需要通过vtable 来调用,但此时面对一块 raw memeory,到哪里去找 vtable 呢?毕竟,vtable 是在构造函数中才初始化的啊,而不是在其之前。因此构造函数不能为虚函数。
(2)析构函数可以是虚函数,且常常如此
这个就好理解了,因为此时 vtable 已经初始化了;况且我们通常通过基类的指针来销毁对象,如果析构函数不为虚的话,就不能正确识别对象类型,从而不能正确销毁对象。
更多 “构造函数可以定义为虚函数,析构函数不可以定义为虚函数。()” 相关考题
考题
下列关于构造函数和析构函数的描述,错误的是( )。A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数
考题
下面属于析构函数特征的是()。
A.析构函数可以重载B.对象销毁前会自动调用析构函数C.如果定义一个类时没有定义析构函数,则系统会提供一个默认析构函数~类名()}D.析构函数的函数类型为void
考题
下面关于构造函数和析构函数的描述中,错误的是( )A.析构函数可以声明为虚函数B.对虚析构函数的调用可以采用动态联编C.一个类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响D.构造函数可以声明为虚函数
考题
下列描述中正确的是( )。A.构造函数可以为虚函数,析构函数不可以为虚函数B.构造函数不可以为虚函数,析构函数可以为虚函数C.构造函数可以为虚函数,析构函数可以为虚函数D.构造函数不可以为虚函数,析构函数不可以为虚函数
考题
下面关于构造函数和析构函数的描述,错误的是()A、析构函数中调用虚函数采用静态联编B、对虚析构函数的调用可以采用动态联编C、当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D、构造函数可以声明为虚函数
考题
判断题构造函数和析构函数均都可以被说明为虚函数,只是构造函数和析构函数的功能不同而已。A
对B
错
热门标签
最新试卷
![瑞牛题库 章节练习 历年真题 模拟试卷](http://assets.51tk.com/51_sidebar_right_index.jpg)