تابع مجازی برای استفاده از خاصیت نوعدهی پویا استفاده میشه که یه اشارهگر از نوع والد به شی از نوع فرزند اشاره میکنه. در اون حالت مجازی بودن یه تابع معنی داره
برای توضیح بیشتر اینجا رو ببینید
اما در مورد سازندهها همچین حالتی رو اصلاً نداریم و سازنده هنگامی که اجرا میشه نوعش به صورت ایستا مشخصه. بنابراین سازندهی مجازی معنی نداره.
مثلاً فرض کنیم کد زیر و برای نوع ایستا داریم
class Shape
{
Shape(){ ... }
};
class Rectangle : public Shape
{
Rectangle(){ ... }
};
void main()
{
Shape *S = new Shape();
Rectangle *R = new Rectanlge();
}
در این صورت مشخص که برای R
باید سازندهی Rectanlge
فراخوانی بشه و برای S
سازندهی Shape
.
حالا کد زیر و در نظر بگیریم که نوعدهی پویا داره
Shape *S = new Rectangle();
در این حالت هم که نوعدهی پویاست اما مشخصه که باید سازندهی Rectangle
فراخوانی بشه نه Shape
.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)