构造函数不能为虚函数的原因

本文解释了C++中虚拟函数的概念及其实现原理,并探讨了为何不存在虚拟构造函数。通过介绍虚拟表(vtable)和虚拟指针(vptr),阐述了如何通过派生类的对象调用重定义的虚拟函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I am one of the person who has pricked my head in understanding the above question. Let me explain in my way...

If you have virtual function or (let me take just "virtual" keyword as of now), it means that this member function can be redefined by derived class. When we have a virtual function in a class, it will have vtable (virtual table). This vtable will have the address of the virtual function which is defined in derived. 
Now the point is, how you invoke the virtual function which is defined in derived class with the help of object of the class?
Once you create an object of class, vptr (virtual pointer) will be created. Which inturn will be pointing to the base address of the vtable. So now it is clear that you can invoke the virtual funtion of derived class only with an object that has created.
Now coming to virtual constructor,
If we make constructor as virtual in base, it means that it could be redefined in derived. Keep in mind that constructor is invoked during object creation (object is not created yet. still it is in the status "creating". Object will create only after executing constructor part code). Assume you are trying to create object of the class which has virtual constructor. During this process constructor of the class will be invoked. It looks for virtual keyword. Now it tries to look for virtual constructor in derived. But not possible bcz there is no vptr and no vtable avaibale at this point of time. So, when object is not created, then there is no vptr. If no vptr for this object, then how the consturtor of derived is invoked?. No address of this construtor will available in vtable.
Hence there is no point in having virtual constructor.

I believe that i have cleared your doubt.

转载于:https://www.cnblogs.com/Key-Ky/p/7987243.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值