构造函数能否为虚函数,为什么
因为创建对象时,必须指明对象所属的类。所以,构造函数不能是虚函数。而在销毁对象时,可以不显明地指明类,这就需要用到多态,而虚函数可以达到多态的效果。
构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。
为什么构造函数不可以是虚函数 ①从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。
构造函数不能是虚函数,析构函数可以且常常是虚函数。创建一个对象时我们总是要明白指定对象的类型。虽然我们可能通过基类的指针或引用去访问它但析构却不一定,我们往往通过基类的指针来销毁对象。
C++构造,析构函数可以是虚函数吗,是否可以被继承?
构造函数不能为虚函数,析构函数则可以,在C++中函数没有继承一说,继承指的是类继承,派生类的构造函数执行时需先构造基类的构造函数,而析构函数的执行顺序则刚好相反。
析构函数不能被继承。构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。所以,在整个层次中的所有的构造函数和析构函数都必须被调用而不能被继承。
根据多态,直接delete,会根据对象,调用析构,即可完美解决,否则需要根据类型转换,很是麻烦啊...所以,总结一下:1,构造函数一定不要是虚函数,2,一个类要被继承派生时,析构函数定义成虚函数是极佳选择。
构造函数可以是是虚函数吗?怎样使构造函数具有虚函数的效果?
构造函数不能为虚函数。原因是在建立一个对象时构造函数可以是虚函数吗,构造函数必须知道其确切类型,否则编译器无法进行存贮空间的分配。
,构造函数一定不要是虚函数,2,一个类要被继承派生时,析构函数定义成虚函数是极佳选择。
为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数( *** 构造函数可以是虚函数吗:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。
为什么C++的构造函数不可以是虚函数,而析构
1、构造函数不能声明为虚函数构造函数可以是虚函数吗,析构函数可以声明为虚函数构造函数可以是虚函数吗,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。
2、因为创建对象时构造函数可以是虚函数吗,必须指明对象所属构造函数可以是虚函数吗的类。所以,构造函数不能是虚函数。而在销毁对象时,可以不显明地指明类,这就需要用到多态,而虚函数可以达到多态的效果。
3、虚析构是为了支持多态机制的,比如基类指针实际指向了一个派生类对象,那么安全的delete指针就需要找对析构的起点,所以虚析构函数是必要的。
4、构造函数不能是虚函数,析构函数可以且常常是虚函数。创建一个对象时我们总是要明白指定对象的类型。虽然我们可能通过基类的指针或引用去访问它但析构却不一定,我们往往通过基类的指针来销毁对象。
5、根据多态,直接delete,会根据对象,调用析构,即可完美解决,否则需要根据类型转换,很是麻烦啊...所以,总结一下:1,构造函数一定不要是虚函数,2,一个类要被继承派生时,析构函数定义成虚函数是极佳选择。
为什么构造函数不能是虚函数?
1、因为创建对象时,必须指明对象所属的类。所以,构造函数不能是虚函数。而在销毁对象时,可以不显明地指明类,这就需要用到多态,而虚函数可以达到多态的效果。
2、问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。
3、构造函数不能声明为虚函数的原因是:1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。
构造函数,静态函数可不可以为虚函数
1、静态函数:定义为静态函数的函数,这个函数只和类有关系,它不完全依赖于对象调用,所以也不能成为虚函数。
2、常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。这个原因很简单,主要是从语义上考虑,所以不支持。
3、非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。实际上,优秀的程序员常常把基类的析构函数定义为虚函数。
关于构造函数可以是虚函数吗和构造函数不能定义为虚函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。