ההבדל בין עומס יתר על פונקציות לבין דריסת יתר ב- C ++

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 1 אַפּרִיל 2021
תאריך עדכון: 11 מאי 2024
Anonim
Difference between function overloading and function overriding | overloading and overriding in c++
וִידֵאוֹ: Difference between function overloading and function overriding | overloading and overriding in c++

תוֹכֶן


ב 'עומס יתר"אנו מגדירים מחדש את הפונקציות העמוסות עם אותו שם פונקציה אך, מספר וסוג פרמטרים שונים. ב 'גובר"אב-טיפוס של הפונקציה העקרונית זהה בכל התוכנית, אך לפונקציה שיש לבטל אותה קודמת מילת המפתח 'וירטואלית' במחלקת הבסיס ומוגדרת מחדש על ידי הכיתה הנגזרת ללא מילת מפתח.

פולימורפיזם הוא אחד המאפיינים המכריעים של OOP. זה פשוט אומר "להשתמש בשם אחד למספר טפסים". ניתן ליישם פולימורפיזם באמצעות 'עומס יתר על פונקציות', 'עומס יתר של מפעילים' ו'פונקציה וירטואלית '. שניהם, 'עומס יתר' וגם 'עקיפה' מרמזים על מושג הפולימורפיזם. כאן, 'עומס יתר' הוא אוסף פולימורפיזם של זמן ו'הגזמה 'הוא פולימורפיזם בזמן. ללמוד עוד אם נדבר על ההבדל העיקרי ב'עומס יתר 'ו'הגזמה'.

יתר על כן, אנו בוחנים את ההבדל בין עומס יתר לבין דריסה בעזרת תרשים השוואה.

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. קווי דמיון
  5. סיכום


טבלת השוואה:

בסיס להשוואהעומס יתרמגבילים
אב טיפוסאב-טיפוס שונה מכיוון שמספר או סוג הפרמטר עשויים להיות שונים.כל ההיבטים של האבטיפוס חייבים להיות זהים.
מילת מפתחלא הוחל מילת מפתח במהלך עומס יתר.קדמה לפונקציה שיש לבטל אותה מילות מפתח וירטואליות, במחלקת הבסיס.
גורם הבחנהמספר או סוג הפרמטר שונים זה מזה שקובע את גרסת הפונקציה נקראת.איזו פונקציית כיתות נקראת על ידי המצביע, נקבעת על ידי, הכתובת של איזה אובייקט כיתות מוקצה לאותה מצביע.
הגדרת דפוסהפונקציה מוגדרת מחדש עם אותו שם, אך מספר וסוג פרמטר שונים.פונקציה מוגדרת, קדמה לה מילת מפתח וירטואלית במחלקה הראשית ומוגדרת מחדש על ידי מחלקה נגזרת עם מילת מפתח חיצונית.
זמן ההישגלקמפל זמן.זמן ריצה.
פונקציה של בונה / וירטואליתניתן להעמיס על בנאים.ניתן לבטל את הפונקציה הווירטואלית.
הרס
לא ניתן להעמיס על המשמיד.ניתן לעקוף את המשמיד.
כריכהעומס יתר משיג כריכה מוקדמת.עקיפה מתייחסת לכריכה מאוחרת.


הגדרת עומס יתר

פולימורפיזם של קומפילציה נקרא 'עומס יתר'. מכיוון שעומס יתר נוצר מתוך מושג של פולימורפיזם, הוא מספק "ממשק משותף למספר שיטות". המשמעות היא שאם פונקציה עומסת יתר, היא מכילה שם פונקציה זהה בזמן שהיא מוגדרת מחדש.

פונקציות עמוסות יתר נבדלות ביחס למספר 'פרמטרים או סוגים שונים של פרמטרים' שונים, והיא הופכת פונקציה עמוסה אחת שונה מזו אחרת. בדרך זו המהדר מזהה איזו פונקציה עמוסה נקראת. הפונקציות הנפוצות ביותר שהן עמוסות יתר הן 'בנאים'. 'העתק בנאי' הוא סוג של "עומס יתר של בנאי".

יישום עומס יתר ב- C ++

עומס בכיתה {int a, b; ציבורי: עומס int (int x) {// עומס ראשון () פונקציה a = x; להחזיר א; } עומס int (int x, int y) {// עומס שני () פונקציה a = x; b = y; להחזיר a * b; }}; int main () {עומס יתר O1; O1.load (20); // פונקציה לטעינה ראשונה () חייג O1.load (20,40); // שיחת פונקציה לטעינה שנייה}

כאן עומס יתר על עומס הפונקציה (). ניתן להבחין בין שתי הפונקציות העומסות בכיתה באופן שפונקציית הטעינה הראשונה () מקבלת רק פרמטר שלם יחיד בלבד, ואילו פונקציית הטעינה השנייה () מקבלת שני פרמטר שלם שלם. כאשר אובייקט עומס המחלקה מכנה את פונקציית העומס () עם פרמטר בודד, פונקציית הטעינה הראשונה () נקראת. כאשר פונקצית קריאה של אובייקט עומדת () עוברת שני פרמטרים, פונקציית העומס השנייה () נקראת.


הגדרת הגזמה

פולימורפיזם שהושג בזמן ריצה נקרא 'עקיפה'. זה נעשה באמצעות 'ירושה' ו'פונקציות וירטואליות '. קדמה לפונקציה שיש לבטל אותה מילת המפתח 'וירטואלית' במחלקת בסיס ומוגדרת מחדש בכיתה נגזרת ללא מילת מפתח.

אחד הדברים החשובים ביותר שיש לזכור במקרה של דריסה הוא שאסור שהאבטיפוס של הפונקציה שנדונה ישתנה בזמן שהמעמד הנגזר מגדיר אותה מחדש. כאשר ניתנת שיחה לפונקציה שבוטלה, C ++ קובע איזו גרסה של הפונקציה נקראת על סמך 'סוג האובייקט שמצביע על ידי מצביע' באמצעותו מתבצעת שיחת הפונקציה.

יישום של דריסת יתר ב- C ++

base class {public: virtual void funct () {// פונקציה וירטואלית של cout class class << "זהו פונקציות class base ()"; }}; class deriv1: public base {public: void funct () {// פונקציה וירטואלית של מחלקת הבסיס שהוגדרה מחדש ב class1 class cout << "זוהי פונקצית class1 deriv1 ()"; }}; class deriv2: public base {public: void funct () {// פונקציה וירטואלית של מחלקת הבסיס שהוגדרה מחדש ב- deriv2 class cout << "זוהי פונקצית deriv2 classs ()"; }}; int main () {base * p, b; נגזר 1 d1; נגזר 2 d2; * p = & b; p-> פונקציה (); // שיחה לפונקציות בכיתת הבסיס (). * p = & d1; p-> פונקציה (); // שיחה לפונקציות class1 של deriv1 (). * p = & d2; p-> פונקציה (); // שיחה לפונקציות class 2 של deriv2 (). להחזיר 0; }

כאן יש מעמד בסיס יחיד שיורש בפומבי על ידי שני כיתות נגזרות. פונקציה וירטואלית מוגדרת בכיתת בסיס עם מילת מפתח 'וירטואלית' והיא מוגדרת מחדש על ידי שתי המחלקות הנגזרות ללא מילת מפתח. בעיקר (), מחלקת הבסיס יוצרת משתנה מצביע 'p' ואובייקט 'b'; 'נגזר 1 ′ כיתה יוצרת אובייקט d1 וכיתוב נגזר 2 יוצר אובייקט d2'.

כעת, בתחילה הוקצה הכתובת של אובייקט מחלקת הבסיס 'b' למצביע של מחלקת הבסיס 'p'. 'P' נותן קריאה לפונקציה funct (), כך נקרא פונקציה של מחלקת הבסיס.ואז הכתובת של אובייקט הכיתה הנגזר 'd1' מוקצה למצביע 'p', שוב היא נותנת קריאה לפונקציה (); כאן מבוצעת הפונקציה פונקציות () של מחזור deriv1. לבסוף, המצביע 'p' מוקצה לאובייקט class 2. ואז 'p' קורא לפונקציה פונקציה () שמפעילה את פונקציית הפונקציה () של מחזור deriv2.

אם המחלקה deriv1 / deriv2 לא הייתה מגדירה מחדש את הפונקציה (), אז הפונקציות () של מחלקת הבסיס היו נקראות, שכן הפונקציה הווירטואלית היא 'היררכית'.

  1. אב-הטיפוס של פונקציה שעומס בעומס שונה בגלל סוג ומספר הפרמטר המועברים לפונקציה העמוסה. מצד שני, אב הטיפוס של הפונקציה המוחלטת לא משתנה מכיוון שפונקציה שבוטלה מבצעת פעולה שונה עבור מחלקה שונה שהיא שייכת אליה אך עם אותו סוג ומספר הפרמטר.
  2. שם הפונקציה העומס יתר אינו מקדים מילות מפתח כלשהן ואילו שם הפונקציה המוחלטת קודמת למפתח הווירטואלי בכיתת הבסיס בלבד.
  3. איזו פונקציה עמוסה מופעלת תלויה בסוג או במספר הפרמטר המועבר לפונקציה. הפונקציה שבוטלה לאיזה מחלקה מופעלת תלויה, כתובת האובייקט של הכיתה מיועדת למצביע, שזמן להפעיל את הפונקציה.
  4. לאיזו פונקציה עומס יתר יש לפתור נפתרת בזמן הקומפילציה. איזו פונקציה שבוטלה להפעיל נפתרת בזמן ריצה.
  5. ניתן להעמיס על בנאים יתר על המידה אך לא ניתן לעקוף אותם.
  6. אי אפשר להעמיס על הרס הרס, אך ניתן לעקוף אותם.
  7. עומס יתר משיג כריכה מוקדמת לפיה פונקציה של עומס יתר תיפתר במהלך קומפילציה. דריסת יתר משיגה כריכה מאוחרת מכיוון שהפונקציה שעליה יבוטל נפתרת בזמן ריצה.

קווי דמיון

  1. שניהם מיושמים על פונקציות חבר בכיתה.
  2. פולימורפיזם הוא המושג הבסיסי שמאחורי שניהם.
  3. שם הפונקציה נותר זהה בזמן שאנו מיישמים עומס יתר ומחיקות על הפונקציות.

סיכום

עומס יתר ועקיפה נראה דומה, אך זה לא המקרה. ניתן להעמיס על פונקציות אך, כל כיתה לא יכולה להגדיר עוד יותר את הפונקציה העומס יתר בעתיד. לא ניתן להעמיס על פונקציה וירטואלית; ניתן לבטל אותם בלבד.