在C++中,能否声明虚构函数?为什么?能否声明虚析构函数?为什么

如题所述

第1个回答  2020-07-05

原因如下:在C++-中不能声明虚构造函数,多态是不同的对象对同一消息有不同的行为特性,虚函数作为运行过程中多态的基础,主要是针对对象的,面构造函数是在对盘产生之前运行的,因此虚构造函数是没有童义的。

在C++中可以声明虚析构函数,析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果一个类的析构函数是虚函数,那么由它派生而来的所有子类的析构函数也是虚函数。

析构函数设置为虚函数之后,在使用指针引用时可以动态联编,实理运行时的多态,保证使用基类的指针就能够谓用适当的析构函数指针对不同的对象进行清理工作。



扩展资料:

虚函数的限制:

1、非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。实际上,优秀的程序员常常把基类的析构函数定义为虚函数。

因为将基类的析构函数定义为虚函数后,当利用delete删除一个指向派生类定义的对象指针时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。

2、只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,而定义函数时不需要使用关键字“virtual”。

3、当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数(函数名相同、参数列表完全一致、返回值类型相关)自动成为虚函数。

4、如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。

参考资料来源:百度百科-虚函数

在C++中,能否声明虚构函数?为什么?能否声明虚析构函数?为什么
原因如下:在C++-中不能声明虚构造函数,多态是不同的对象对同一消息有不同的行为特性,虚函数作为运行过程中多态的基础,主要是针对对象的,面构造函数是在对盘产生之前运行的,因此虚构造函数是没有童义的。在C++中可以声明虚析构函数,析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果...

C++中为什么构造函数不能是虚函数,析构函数是虚函数
析构函数在某些情况下必须为虚函数(比如你想让你类能够被继承,那么这个类的析构函数最好是虚的,继承一个析构函数不是虚的类是有风险的),值得补充的是,当基类的函数是虚函数,子类的重载的函数也是虚的,即使不加virtual关键字也是虚的。

刨析一下C++构造析构函数能不能声明为虚函数的背后机理?
析构函数是否可以声明为虚函数?答案是可以的。不声明为虚函数时,系统在销毁对象时会调用基类析构函数,导致基类析构函数执行而派生类析构函数未执行,引起内存泄漏。声明为虚函数后,系统首先在对象虚函数表中查找当前类析构函数,执行后,按静态特性逐层向上查找并执行父类析构函数,确保所有资源被正确...

为什么C++的构造函数不可以是虚函数,而析构函数可以是虚函数
C++的构造函数不能是虚函数,因为构造函数需在对象创建时自动调用,而虚函数调用依赖于指针或引用,此时对象内存空间尚未存在,无法找到虚函数表。相反,析构函数可以是虚函数,因为其在删除指针时无论指向基类还是派生类,都会根据类型调用相应的析构函数,这有助于避免资源泄漏。C++不将析构函数设为默认...

为什么C++的构造函数不可以是虚函数,而析构
③构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它。但析构却不一定,我们往往通过基类的指针来销毁对象。这时候如果析构函数不是虚函数,就不能正确识别对象类型从而不能正确调用析构函数。④从实现上看...

构造、析构函数可否为virtual
不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因是:解释一:所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造。还有一个原因就是为了...

C++中为什么构造函数不能定义为虚函数
不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因是:1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象 的实际类型,是该类本身,还是该类的一个派生类,或是更深层次...

C++基类的析构函数为何要声明为虚函数
C++语言中,基类的析构函数为何要声明为虚函数?构造函数用于初始化对象,不能声明为虚函数,因为构造函数执行时对象尚未创建完毕,虚函数表不存在。相反,析构函数用于释放对象创建时占用的资源,可以声明为虚函数。通过实例分析,展示基类析构函数声明为虚函数的重要性。定义基类`base`与派生类`derived`。

C++中虚函数的作用和虚函数的工作原理
如果定义的类被用作基类,应将要在派生类中重新定义的方法声明为虚。构造函数不能为虚函数,基类的析构函数应该为虚函数,友元函数不能为虚函数。如果派生类没有重定义函数,则会使用基类版本。重新定义继承的方法若与基类的方法不同,则会隐藏基类方法;如果基类声明的方法被重载,则派生类也需要对重载...

析构函数和虚函数的用法和作用
;析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。有适放内存空间的做用!虚函数是C++多态的一种表现 例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设...

相似回答
大家正在搜