سه شنبه ۳۱ اردیبهشت ۱۳۹۲ ارسال شده توسط prodo
تابع مجازی برای استفاده از خاصیت نوعدهی پویا استفاده میشه که یه اشارهگر از نوع والد به شی از نوع فرزند اشاره میکنه. در اون حالت مجازی بودن یه تابع معنی داره
[برای توضیح بیشتر اینجا رو ببینید][1]
اما در مورد سازندهها همچین حالتی رو اصلاً نداریم و سازنده هنگامی که اجرا میشه نوعش به صورت ایستا مشخصه. بنابراین سازندهی مجازی معنی نداره.
مثلاً فرض کنیم کد زیر و برای نوع ایستا داریم
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`.
[1]: http://%D8%A7%DB%8C%D9%86%D8%AC%D8%A7%20%D8%B1%D9%88%20%D8%A8%D8%B1%D8%A7%DB%8C%20%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%20%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1%20%D8%A8%D8%A8%DB%8C%D9%86%DB%8C%D8%AF
پنجشنبه ۲ خرداد ۱۳۹۲ ویرایش شده توسط prodo
تابع مجازی برای استفاده از خاصیت نوعدهی پویا استفاده میشه که یه اشارهگر از نوع والد به شی از نوع فرزند اشاره میکنه. در اون حالت مجازی بودن یه تابع معنی داره
[برای توضیح بیشتر اینجا رو ببینید][1]
اما در مورد سازندهها همچین حالتی رو اصلاً نداریم و سازنده هنگامی که اجرا میشه نوعش به صورت ایستا مشخصه. بنابراین سازندهی مجازی معنی نداره.
مثلاً فرض کنیم کد زیر و برای نوع ایستا داریم
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`.
[1]: http://%D8%A7%DB%8C%D9%86%D8%AC%D8%A7%20%D8%B1%D9%88%20%D8%A8%D8%B1%D8%A7%DB%8C%20%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%20%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1%20%D8%A8%D8%A8%DB%8C%D9%86%DB%8C%D8%AFhttp://uili.ir/1551/%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-%D9%85%D8%AC%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%86%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D9%85%DB%8C%DA%A9%D9%86%DB%8C%D9%85%D8%9F