מפרטי גישה C ++

C Access Specifiers



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

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







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



תוכן המאמר

המפרט הציבורי והפרטי

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



#לִכלוֹל
באמצעות מרחב שמותשעה (ות;

מעמדTheCla
{
פְּרָטִי:
intמספר 1;
intnum2;
פּוּמְבֵּי:
TheCla(intn1,intn2)
{
מספר 1=n1;num2=n2;
}
intשיטה()
{
לַחֲזוֹרמספר 1;
}
};

intרָאשִׁי()
{
TheCla obj(10,עשרים);
intמס '2=obj.שיטה();
עֲלוּת<<מס '2<<' n';

// int no1 = obj.num1;

לַחֲזוֹר 0;
}

הפלט הוא 10. החברים הפרטיים הם num1 ו- num2. חברי הציבור הם TheCla () ושיטה (). שים לב כי TheCla () היא פונקציית הקונסטרוקטור שמאתחלת משתנים מעניינים. האזור של מציין גישה מתחיל מהתווית שלו עד סוף תיאור המחלקה (הגדרה) או לתחילת מציין גישה אחר.





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

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



עם זאת, פונקציה או אופרטור שאינו מוצהר בתיאור המחלקה ומחוץ לתיאור המחלקה יכולים לגשת רק לחברי ציבור בכיתה. הפונקציה הראשית (), למשל, היא פונקציה המוצהרת מחוץ לתיאור המחלקה. היא הצליחה לגשת רק לשיטה () ולחברי הציבור של TheCla (). בתוך הפונקציה הראשית (), הפונקציה TheCla () היא obj (10, 20).

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

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

מעמדTheCla
{
intמספר 1;
intnum2;
פּוּמְבֵּי:
TheCla(intn1,intn2)
{
מספר 1=n1;num2=n2;
}
intשיטה()
{
לַחֲזוֹרמספר 1;
}
};

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

המפרט המוגן

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

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

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

#לִכלוֹל
באמצעות מרחב שמותשעה (ות;

מעמדTheCla
{
פּוּמְבֵּי:
intמספר 1= 10;
מוּגָן:
intnum2= עשרים;
פְּרָטִי:
intnum3= 30;
};

מעמדChildCla: פּוּמְבֵּיTheCla
{
פּוּמְבֵּי:
intשיטה 1()
{
לַחֲזוֹרמספר 1;
}
intשיטה 2()
{
לַחֲזוֹרnum2;
}
/*int method3 ()
{
החזרה num3;
} * /

};

intרָאשִׁי()
{
ChildCla child Obj;
intמספר 1=ילד אוביי.שיטה 1();
עֲלוּת<<מספר 1<<' n';

intמס '2=ילד אוביי.שיטה 2();
עֲלוּת<<מס '2<<' n';

לַחֲזוֹר 0;
}

הפלט הוא:
10
עשרים

במחלקה הבסיסית, num1 הוא ציבורי, num2 מוגן, ו- num3 הוא פרטי. בכיתה הנגזרת, כל הפונקציות החברות הן ציבוריות. הפונקציה הראשונה, שיטה 1 (), ניגשת לחבר הנתונים הציבורי, מספר 1. הפונקציה השנייה, method2 (), ניגשת לחבר הנתונים המוגן, num2. הפונקציה השלישית, method3 (), על אף שהגיבו כעת, צריכה לגשת לחבר הנתונים הפרטי, num3.

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

מעמדChildCla: פּוּמְבֵּיTheCla{}

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

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

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

מפרט מחלקה נגזרת ומפרטי חברים

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

מעמדChildCla: מוּגָןTheCla{}

הידור והפעל את התוכנית ושימו לב שהתוצאה זהה לבעבר.

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

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

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

מעמדChildCla: פְּרָטִיTheCla{}

הידור והפעל את התוכנית ושימו לב שהתוצאה זהה לבעבר.

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

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

#לִכלוֹל
באמצעות מרחב שמותשעה (ות;

מעמדTheCla
{
פּוּמְבֵּי:
intמספר 1= 10;
מוּגָן:
intnum2= עשרים;
פְּרָטִי:
intnum3= 30;
};

מעמדChildCla: פּוּמְבֵּיTheCla
{
מוּגָן:
intשיטה 1()
{
לַחֲזוֹרמספר 1;
}
intשיטה 2()
{
לַחֲזוֹרnum2;
}
/*int method3 ()
{
החזרה num3;
} * /

};

intרָאשִׁי()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
עֲלוּת<
/*int no2 = childObj.method2 ();
עֲלוּת<
לַחֲזוֹר 0;
}

התוכנית עובדת כפי שהיא. אין פלט, ואין אמור להיות פלט כלשהו, ​​בהתבסס על אופן הקלדת התוכנית.

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

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

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

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

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

מעמדChildCla: מוּגָןTheCla{}

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

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

מעמדChildCla: פְּרָטִיTheCla

הידור והפעל את התוכנית ושימו לב שהתוצאה תהיה כבעבר.

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

מעמדChildCla: פּוּמְבֵּיTheCla{}

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

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

מעמדChildCla: מוּגָןTheCla{}

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

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

מעמדChildCla: פְּרָטִיTheCla{}

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

סיכום

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

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

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

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

הפניות המשמשות בעבודה זו