כל מה שאתה צריך לדעת על ירושה ב- C ++



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

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

מהי ירושה ב- C ++

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





ירושה ב- C ++

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



תחביר:

מחלקה נגזרת_קלאס: גישה_סוג בסיס_קלאס {// גוף מחלקה}

כיתת בסיס: המחלקה המורכבת מכל השיטות והתכונות הכלליות אשר ניתן לשתף בכיתות אחרות בכדי להגביר את קריאות הקוד נקראת מחלקת בסיס.

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



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

אז כיתת הסטודנטים והפקולטה תירש מ- XYZ.

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

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

  1. פּוּמְבֵּי
  2. פְּרָטִי
  3. מוּגָן

הטבלה שלהלן תביא לך הבנה טובה של איזה סוג נתונים ניתן לגשת לפי מחלקה נגזרת בהתאם למפרט הגישה השונה.

מפרט גישה נתונים ציבוריים נתונים פרטיים נתונים מוגנים
פְּרָטִי לא בירושהלא בירושהלא בירושה
מוּגָן מוּגָן פְּרָטִי מוּגָן
פּוּמְבֵּי פּוּמְבֵּי פְּרָטִי מוּגָן

ירושה יחידה

ירושה יחידה יכולה להיחשב כצורת וניל רגילה. בירושה יחידה, מעמד יחיד יורש ממעמד בסיס.

# כלול שימוש בכיתת מרחב שמות std רכבת {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<מקרה ירושה זה נקרא בתור ירושה מרובת רמות. הכיתה בין המחלקה הראשונה לאחרונה ידועה גם כמעמד בסיס ביניים.מה אתה חושב, האם המחלקה האחרונה יכולה לרשת את בני המחלקה הראשונה? כן זה יכול

# כלול שימוש במחלקת std namespace ראשית {מוגנת: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

תְפוּקָה:

ערך a = 10

ערך b = 20

ערך c = 30

ערך d = 50

ירושה היררכית

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

# כלול שימוש במרחב השמות std class מכללה {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

תְפוּקָה:

אנחנו בכיתה מכללה

אנחנו בכיתה מכללה

ירושה מרובה ב- C ++

ראינו בירושה היררכית שכיתת בסיס אחת הייתה יותר ממעמד נגזר אחד. בירושה מרובה בכיתה נגזרת אחת יש יותר ממעמד בסיס אחד.

# כלול שימוש בכיתת מרחב names std One {מוגן: int a public: void getinfoOne (int x) {a = x}} מחלקה שנייה {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < בשלב זה, אנו מבינים היטב את כל סוגי הירושות המשמשים ב- C ++. אבל, רגע, אם אנחנו רוצים להשתמש בשני סוגים שונים של ירושה? האם זה אפשרי? כן, זה אפשרי בעזרת ירושה היברידית. בירושה היברידית, אנו משלבים שני סוגים שונים של ירושה. לדוגמא- ירושה מרובת רמות, ירושה מרובה וכמה וכד '.

# כלול שימוש במרחב השמות std class World {מוגן: int a public: void getinfoWorld (int x) {a = x}} class יבשת: public public {מוגן: int b public: void getinfoContinent (int y) {b = y}} class מדינה {מוגן: int d ציבור: void getinfoCountry (int m) {d = m}} class אוסטרליה: ציבור יבשת, ציבור מדינה {public: void Display () {std :: cout<< 'Value of a = ' < 

בואו ונבין את התרשים שלעיל שיעזור לנו להבין את בעיית היהלום. מחלקה B ומחלקה C יורשת ממחלקה A ומכאן שגם למחלקה A וגם למחלקה B יש תכונות ושיטות של מחלקה A. אם מחלקה D יורשת ממחלקה B וכן ממחלקה C. בכיתה D יהיו כל התכונות של מחלקה B וכיתה C יש לו גם את כל התכונות של מחלקה A שעוברות בירושה ממחלקה B וכן ממעמד C. מכאן שאם נעשה אובייקט של מחלקה D ונקרא לשיטה של ​​מחלקה A. תיווצר מצב מעורפל והמהדר יתבלבל מהיכן זה צריך להיות שיטת המחלקה של A, ממחלקה B או מחלקה D.

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

מחלקה A {} מחלקה B: ציבור וירטואלי A {} מחלקה C: ציבור וירטואלי A {} מחלקה D: ציבור C, ציבורי D {}

עם זאת, אנו מגיעים לסוף מאמר זה בירושה ב- C ++. אם ברצונך ללמוד עוד, עיין ב מאת אדוריקה, חברת למידה מקוונת אמינה. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה נועד להכשיר אותך לקונספטים מרכזיים של Java וגם עם מסגרות Java שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת במדור התגובות בבלוג זה ונחזור אליך בהקדם האפשרי.