5.2.2. Downcasting מול Dynamic Bindingניתן בעזרת downcasting לכאורה לוותר על הצורך ב-dynamic binding, לדוגמא: void draw(Shape *p) { if (Circle *q = dynamic_cast<Circle *>p) { // Draw circle ... } else if (Line *q = dynamic_cast<Line *>p) { // Draw line ... } else if (Rectangle *q = dynamic_cast<Rectangle *>p) { // Draw rectangle ... } ... } למרות ששיטה זו תעבוד, היא לא מומלצת. הסיבה: אם נשתמש בה, אז אם נוסיף מחלקה חדשה אל מודל המחלקות שלנו, נצטרך ללכת לכל המקומות בקוד שיש בהם if כזה, ולשנות אותם. לעומת זאת אם היינו משתמשים ב-dynamic binding לא היה צורך. |
תוכן העניינים:
קישורים רלוונטיים:שיתוף: |
Borland style vptr
לפי מה שאני מכיר:"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....