×

构造函数可以是虚函数吗 构造函数 虚函数

C++中为什么构造函数不能是虚函数,析构函数是虚函数?简述构造函数和析构函数的作用

admin admin 发表于2022-07-09 11:33:03 浏览84 评论0

抢沙发发表评论

C++中为什么构造函数不能是虚函数,析构函数是虚函数


调用构造函数时,虚表才建立,构造函数是虚函数,谁建立虚表啊....
析构函数之所以搞成虚函数,因为你可能采用基类指针动态申请派生类对象,
用完用delete吧,这时
将才产生一个问题,基类指针指向何种对象?如果是虚函数,根据多态,
直接delete,会根据对象,调用析构,即可完美解决,否则需要根据类型转换,很是麻烦啊...
所以,总结一下:
1,构造函数一定不要是虚函数,
2,一个类要被继承派生时,析构函数定义成虚函数是极佳选择。

简述构造函数和析构函数的作用


构造函数只是起初始化值的作用,但实例化一个对象的时候,可以通过实例去传递参数,从主函数传递到其他的函数里面,这样就使其他的函数里面有值了。

析构函数与构造函数的作用相反,用于撤销对象的一些特殊任务处理,可以是释放对象分配的内存空间。

把类的声明放在main函数之前,它的作用域是全局的。这样做可以使main函数更简练一些。在main函数中定义了两个对象并且给出了初值,然后输出两个学生的数据。

当主函数结束时调用析构函数,输出stud has been destructe!。值得注意的是,真正实用的析构函数一般是不含有输出信息的。



扩展资料:

当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点。

构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)。

当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。


何时调用构造函数,复制构造函数,析构函数


构造函数 在对象生成时调用.可能是在定义的时候, 或者new分配的时候.
调用哪个构造函数 由构造参数决定.
如果构造参数是另一个同类对象,那就是复制构造函数. 如果无参 那就是无参构造或者默认构造.
而析构函数是在对象生命周期结束, 即释放时调用.
new出来的对象会在delete时调用
局部变量 在退出作用域时调用.
全局变量和静态局部变量在程序退出时调用.
-虚函数