首页 > 试题广场 >

下面有关析构函数和虚函数的说法,错误的是?

[单选题]
下面有关析构函数和虚函数的说法,错误的是?
  • 析构函数可以在对象生命期结束时释放对象动态分配的内存资源
  • 析构函数是特殊的类成员函数,它的名字和类名相同,前面加了~符号,没有返回值,没有参数,不能随意调用,但是可以重载
  • 使用虚函数,可以灵活的进行动态绑定
  • 如果一个类可能做为基类使用的话,将其析构函数虚拟化, 这样当其子类的对象退出时,也会一并调用子类的析构函数释放内存
遍览前人,我总结下:

(1)重载,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 

 (2)c++中不释放空间会造成内存泄漏,析构函数就是用来执行这一任务的

 (3)析构函数没有返回值,也没有参数,没有函数类型,因此不能被重载

 (4)因为子类的析构需求不一致,用统一的父类析构函数可能造成析构不完全,因此一般设置父类析构函数为虚函数,然后在子类中具体实现。在父类指针下,根据对象所属子类动态地加载子类析构函数

 (5)虚函数可以进行重载


发表于 2019-04-23 23:01:19 回复(1)
更多回答
B
重载,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
析构函数没有返回值,也没有参数,没有函数类型,因此不能被重载
发表于 2015-04-11 22:20:02 回复(2)
A. c++中不释放空间会造成内存泄漏,析构函数就是用来执行这一任务的
B. 析构函数是不能重载的,因为析构函数没有返回值,没有参数。析构函数的类名比构造函数的类名多了一个~
C. D. 因为子类的析构需求不一致,用统一的父类析构函数可能造成析构不完全,因此一般设置父类析构函数为虚函数,然后在子类中具体实现。在父类指针下,根据对象所属子类动态地加载子类析构函数
发表于 2016-09-17 22:36:25 回复(0)
析构函数是在类对象死亡时由系统自动调用,其作用是用来释放对象的指针数据成员所 指的动态空间,如果在构造函数中你申请了动态空间,那么为了避免引起程序错误,你必须 在西沟函数中释放这部分内存空间 如果基类的函数用 virtual修饰,成为虚函数,则其派生类相应的重载函数仍能继承该虚 函数的性质,虚函数进行动态联编,也即具有多态性,也就是派生类可以改变基类同名函数 的行为,在面向对象世界中,多太是最强大的机制,须函数就是这一机制的c++的实现方式
发表于 2014-11-14 23:31:10 回复(1)

有关析构函数和构造函数的几点说明:(http://blog.csdn.net/zm1_1zm/article/details/77221919
    1. 造函数和析构函数都不能被继承(构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。所以,在整个层次中的所有的构造函数和析构函数都必须被调用而不能被继承。
    2. 构造函数可以重载,析构函数不可以重载(构造函数可以有参数,析构函数没有参数。)
    3. 构造函数不可以是虚函数,析构函数可以是虚函数
1.  构造函数为什么不能为虚函数?

     a.  存储空间角度: 虚函数的调用需要虚函数表指针,而该指针存放在对象的内容空间中,需要调用构造函数才可以创建他的值,否则即使开辟了空间,则虚表指针为随机值,不会找到构造函数;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数——构造函数了。

 b.  使用上:  从实现上看,vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数;

 虚函数主要是实现多态,在运行时才可以明确调用对象,根据传入的对象类型,来调用函数当一个构造函数被调用时,它做的首要的事情之一是初始化它的V P T R。因此,它只能知道它是“当前”类的,而完全忽视这个对象后面是否还有继承者。当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码- -既不是为基类,也不是为它的派生类(因为类不知道谁继承它)。

c.  所以它使用的V P T R必须是对于这个类的V TA B L E。而且,只要它是最后的构造函数调用,那么在这个对象的生命期内, V P T R将保持被初始化为指向这个V TA B L E, 但如果接着还有一个更晚派生的构造函数被调用,这个构造函数又将设置V P T R指向它的 V TA B L E,等.直到最后的构造函数结束。V P T R的状态是由被最后调用的构造函数确定的。这就是为什么构造函数调用是从基类到更加派生 类顺序的另一个理由。

2.析构函数可以使用虚函数?

     对象已经创建,虚表指针存放析构函数的地址,基类与派生类都含有析构虚函数,创建基类与子类对象,都含有各类的虚表指针,当写通用函数时,运行根据传入对象的类型确定析构函数的地址,然后调用该析构函数。 但析构却不一定,我们往往通过基类的指针来销毁对象。这时候如果析构函数不是虚函数,就不能正确识别对象类型从而不能正确调用析构函数。

发表于 2017-08-16 09:56:44 回复(0)
析构函数不可重载。
发表于 2015-07-15 21:40:58 回复(0)
析构函数不可重载。构造函数因为还有参数,可以重载。
发表于 2021-03-31 11:40:45 回复(0)
析构的作用是释放对象所占用的资源。这个说法不太严谨,如果是new的对象必须要手动的delete.
发表于 2016-06-16 02:22:22 回复(0)
析构函数的名字是类名前加上~,不能重载
发表于 2015-06-09 16:01:26 回复(0)
析构函数没有返回值,也没有参数,因此不能被重载。析构函数的名称与类名相同,前面加上波浪号(~),是特殊的成员函数。析构函数的作用是在对象被销毁时执行一些清理工作,例如释放动态分配的内存资源。由于析构函数不能被重载,因此在一个类中只能有一个析构函数,用来清理该类的实例。
发表于 2023-10-31 11:41:46 回复(0)
A  我个人认为也是错的,析构函数无法自动地释放动态申请的空间,但是能够动态地释放内存空间。这两句话不是一个意思,望纠正答案!
发表于 2024-07-22 13:23:14 回复(0)
几个解析说的没毛病,但是容易产生歧义,析构函数没有函数类型,但是这个不是它不能重载的原因,构造函数也没有函数类型,但是可以重载。
所以没有函数类型与它能不能被重载之间没有因果关系,好多回答说xxxxx,没有函数类型,所以xxx不能重载,容易让人误解。
发表于 2022-03-11 15:06:24 回复(0)
析构函数没有返回值,也没有参数,没有函数类型,因此不能被重载。 因为子类的析构需求不一致,用统一的父类析构函数可能造成析构不完全,因此一般设置父类析构函数为虚函数,然后在子类中具体实现。在父类指针下,根据对象所属子类动态地加载子类析构函数
编辑于 2020-12-24 20:01:18 回复(0)
B选项的正确说法为:析构函数是特殊的类成员函数,它的名字是类名前加~,没有返回值,没有参数,不能随意调用,不可以重载,但构造函数可以被重载。
发表于 2019-02-20 20:29:39 回复(0)
ABD显然全是错的,这道题出错了。
发表于 2018-04-08 23:55:01 回复(0)
析构函数不可能重载
发表于 2016-08-25 22:14:50 回复(0)
B  虚函数不能重载
发表于 2015-05-01 15:20:16 回复(0)