דריסת פונקציות C ++

C Function Overriding



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

בשינוי פונקציות, כיתת הילד מגדירה מחדש את הפונקציה שכבר מוגדרת במחלקת ההורים שלה.







הוא מאפשר למתכנת לספק פונקציונליות ספציפית למחלקה הנגזרת (למרות שהיא מוגדרת במחלקת הבסיס).



כעת, נראה מספר דוגמאות ונבין את הרעיון המכריע בפונקציות ב- C ++.



דוגמה -1

הגדרתי שתי מחלקות בקוד הדוגמה שלהלן - מחלקת בסיס ומחלקה נגזרת. למחלקה הבסיסית יש פונקציית חבר, כלומר disp (). ה- Derived_Class עוברת בירושה מה- Base_Class. הפונקציה disp () קיימת ב- Base_Class ולאחר מכן מוגדרת מחדש ב- Derived_Class.





בפונקציה הראשית (), נוצר אובייקט של Derived_Class, כלומר, d. לאחר מכן, אנו קוראים לפונקציה disp () על אובייקט המעמד הנגזר, כך שהפונקציה במחלקה הנגזרת תופעל. כאן מתעלמים מגירסת מחלקת הבסיס. תוכל לראות מתחת לפונקציה פלט as - disp () במחלקה הנגזרת.

#לִכלוֹל

באמצעות מרחב שמות std;

// מחלקת בסיס
class Base_Class
{
פּוּמְבֵּי:
בָּטֵללְהוֹעִיל()
{
עֲלוּת<< פונקציית 'disp () במחלקת הבסיס.' <<endl;
}

};

// מחלקה נגזרת
class Derived_Class:public_Class ציבורי
{
פּוּמְבֵּי:
בָּטֵללְהוֹעִיל()
{
עֲלוּת<< הפונקציה 'disp () במחלקה הנגזרת' <<endl;
}
};

intרָאשִׁי()
{
Derived_Class d;
ד.לְהוֹעִיל(); // disp () פונקציה על אובייקט מחלקה נגזר
לַחֲזוֹר 0;
}



דוגמה -2

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

#לִכלוֹל

באמצעות מרחב שמות std;

class Base_Class
{
פּוּמְבֵּי:
בָּטֵללְהוֹעִיל()
{
עֲלוּת<< פונקציית 'disp () במחלקת הבסיס.' <<endl;
}

};

class Derived_Class:public_Class ציבורי
{
פּוּמְבֵּי:
בָּטֵללְהוֹעִיל()
{
Base_Class::לְהוֹעִיל(); // התקשר לגרסת המחלקה הבסיסית של disp ()
}
};

intרָאשִׁי()
{
Derived_Class d;
ד.לְהוֹעִיל();
לַחֲזוֹר 0;
}

דוגמה -3

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

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

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

#לִכלוֹל

באמצעות מרחב שמות std;

בעלי חיים בכיתה
{
פּוּמְבֵּי:
בָּטֵלנשמע()
{
עֲלוּת<< 'צליל חיות!' <<endl;
}

};

// שיעור נגזר - שיעור כלבים
כלב בכיתה:חיה ציבורית
{
פּוּמְבֵּי:
בָּטֵלנשמע()
{
עֲלוּת<< 'צליל כלבים - נביחה.' <<endl;
}
};

// שיעור נגזר - שיעור ברווז
ברווז בכיתה:חיה ציבורית
{
פּוּמְבֵּי:
בָּטֵלנשמע()
{
עֲלוּת<< 'צליל ברווז - קוואק.' <<endl;
}
};


intרָאשִׁי()
{
כלב כלב;
ברווז ברווז;

כֶּלֶב.נשמע(); // צליל () של כלב
ברווז.נשמע(); // צליל () של ברווז

לַחֲזוֹר 0;
}

סיכום

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