خیلی خلاصه: هیچوقت از متدهای virtual در سازنده و نابودگر کلاس استفاده نکنید. در سی شارپ و جاوا استفاده از این نوع متدها مشکلی ایجاد نمیکند. اما در C++ متدهای virtual در سازنده و نابودگر کلاس نادیده گرفته شده و حتی در کلاسهای مشتق شده نیز متدهای کلاس پایه صدا زده می شوند.
مثال:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ |
class base { public: base() { init(); } virtual void init() { cout<<"base"; } } class derived: public base { public: derived(): base() { } virtual void init() { cout<<"derived"; } } void f() { derived d; } |
در این مثال با فراخوانی سازنده کلاس derived در واقع انتظار داریم که روی صفحه عبارت derived نوشته شود، در صورتیکه در واقعیت عبارت base به نمایش خواهد آمد.
توضیحات بیشتر
اگه میشه در مورد template ها و توابع virtual مطالب بیشتری بزارید .مخصوصاً توابع virtual و موارد استفاده و فوایدشون
ممنون