ההבדל בין מבנה לאיחוד
תוֹכֶן
C ++ מאפשר לכל חמשת הדרכים ששפת C סיפקה ליצירת נתונים בהתאמה אישית. חמש הדרכים הללו הן 'מבנה', 'שדה סיביות', 'איחוד', 'ספירה', 'typedef'. במאמר שלהלן אנו הולכים ללמוד את ההבדל בין מבנה לאיחוד. המבנה והאיחוד שניהם הם סוגי נתוני המכולה שיכולים להכיל נתונים מכל סוג ". ההבדל העיקרי היחיד שמבדיל מבנה ואיחוד הוא שלמבנה יש מיקום זיכרון נפרד עבור כל אחד מחבריו ואילו חברי האיגוד חולקים את אותו מיקום זיכרון.
בואו נבין את ההבדל בין מבנה לאיחוד, יחד עם תרשים השוואה.
- טבלת השוואה
- הגדרה
- הבדלים עיקריים
- קווי דמיון
- סיכום
טבלת השוואה
בסיס השוואה | מבנה | איחוד |
---|---|---|
בסיסי | מיקום הזיכרון הנפרד מוקצה לכל אחד מהחברים במבנה. | כל חברי האיגוד חולקים את אותו מיקום זיכרון. |
הצהרה | struct struct_name { type element1; type element2; . . } משתנה 1, משתנה 2, ...; | איחוד u_name { type element1; type element2; . . } משתנה 1, משתנה 2, ...; |
מילת מפתח | מבנה | איחוד |
גודל | גודל מבנה = סכום הגודל של כל חברי הנתונים. | גודל האיחוד = גודל החברים הגדולים ביותר. |
ערך בחנות | שומר ערכים ברורים לכל החברים. | מאחסן ערך זהה לכל החברים. |
בכל פעם | מבנה מאגר מספר ערכים, של החברים השונים, של המבנה. | איחוד אוגר ערך יחיד בכל פעם לכל החברים. |
דרך הצפייה | ספק דרך יחידה להצגת כל מיקום זיכרון. | ספק דרך מרובה להצגת מיקום זיכרון זהה. |
תכונה אנונימית | אין תכונה אנונימית. | ניתן להכריז על איחוד אנונימי. |
הגדרת מבנה
המבנה הוא אוסף של משתנים מסוגי נתונים שונים המכונים שם משותף. המשתנים במבנה נקראים "חברים". כברירת מחדל, כל חברי המבנה הם "ציבוריים". כשאתה מכריז על מבנה, אתה יוצר תבנית, שניתן להשתמש בה כדי ליצור אובייקטים של מבנה, תוך שיתוף באותו ארגון של חברי נתונים ופונקציות חברים. לפני הצהרת המבנה תמיד קדמה מילת המפתח "struct", המספרת למהדר כי מבנה הוכרז. ניקח דוגמא.
ניקח דוגמא.
עובד מבנה {שם מחרוזת; שם חברה של מחרוזת; עיר מיתרים; } emp1, emp2;
כאן אנו מצהירים על מבנה לאחסון המידע של העובדים. ההכרזה מסתיימת על ידי פסיק, שכן הצהרת מבנה היא הצהרה, וב- C ++ ההצהרה מסתיימת על ידי נקודה פסיק.
השם שניתן למבנה מגדיר "סוג" (בדוגמה לעיל שם המבנה הוא "עובד"). ניתן ליצור את המשתנים מהסוגים הללו, כפי שלעיל יצרנו שני emp1 ′ ו- emp2 variable משתנה מסוג "עובד". בדוגמה לעיל יצרנו משתנה 'מבנה' ממש לאחר ההכרזה; לסירוגין, ניתן ליצור אותו בנפרד.
מבנה עובד emp1, emp2; // מבנה מילת המפתח אינו חובה.
ניתן לאתחל את החברים במשתנה מבנה או לגישה באמצעות מפעיל הנקודה (.).
emp1.name = "ashok";
ניתן להקצות את המידע הכלול במשתנה מבנה אחד למשתנה מבנה אחר מאותו סוג להלן.
emp1.name = "ashok"; emp1.company_name = "פיקסל"; emp1.city = "דלהי"; emp2 = emp1; // הקצאת ערכים של חבר ה- emp1 ל- emp2. cout <
כאן, הקצנו את משתנה המבנה 'emp1' ל- 'emp2', כך 'emp1' מעתיק את כל הערך של חבריו לחבר המקביל ב- 'epm2'.
ניתן להעביר את חבר משתנה המבנה לפונקציה.
פונקציה (emp1.city);
ניתן להעביר את כל משתנה המבנה לפונקציה, הן על ידי השיטות שיחות לפי ערך והן קריאה באמצעות הפניה.
funt (emp1); // פונקציית שיחות בשיטת שיחה לפי ערך. . . void funct (struct emp emp) {// receving ערכים של חברי emp1. cout <
כאן השינוי לערך של חבר במשתנה המבנה לא ישקף מחוץ לפונקציה שכן משתנה מועבר בשיטת שיחה לפי ערך. עכשיו נעשה את אותו הדבר באמצעות שיחה בשיטת הפניה.
funt (& emp1); // פונקציית שיחה באמצעות שיחה בשיטת הפניה. . . void funct (struct struct * emp) {// receving address of emp1. emp-> city = "נור"; // לשנות את הערך של החבר (העיר) של משתנה emp1. . }
כאן, משתנה המבנה מועבר על ידי הפניה כך ששינוי לערך של חברי משתנה המבנה משקף גם מחוץ לפונקציה.
עובד srtuct * emp; // decalring את מצביע המבנה של עובד מסוג. emp = & emp1; // הקצאת הכתובת של emp1 למצביע. emp-> city // מצביע הגישה לעיר החברת emp1.
ניתן ליצור את המצביע למבנה; הוא מחזיק את הכתובת של משתנה המבנה.
במבנה האתחול המצטבר מותר כאשר הגדרת המבנה אינה מכילה, כל בנאי או פונקציות וירטואליות מוגדרות על ידי המשתמש או מחלקת בסיס או שדה פרטי או מוגן.
int main () {struct epm3 = {"אניל", "Teckpix", "נור"}; } // אפשרי כיוון שמבנה העובד אינו מכיל את הדברים המוזכרים לעיל.
הגדרת האיחוד
איחוד הוא מיקום זיכרון המשותף לשני סוגים שונים או יותר של משתנה המוצהר תחת סוג איחוד יחיד. מילת המפתח המשמשת להכריזת איחוד היא "איחוד". ב- C ++, איחוד עשוי להכיל גם פונקציה של חבר וגם משתנים. כברירת מחדל, כל חברי האיגוד הם "ציבוריים". הכרזת ה"איחוד "דומה להצהרת המבנה.
איחוד u_type {int x, char c; לצוף f; } u1, u2;
הנה, הכרזנו על איחוד בשם u_type. החברים בסוג u_type הם 'x' מסוג שלם שלם, 'c' מסוג התווים ו- 'f' מסוג הציפה. יצרנו גם את משתני האיחוד 'u1' ו- 'u2', מסוג 'u_type', ממש לאחר ההכרזה על איחוד. אנו יכולים גם להכריז על משתנה האיחוד בנפרד מהכרזת האיחוד.
int main () {איחוד u_type u1, u2; // איחוד מילות המפתח אינו חובה ב- C ++. }
הגישה של חברי האיגוד יכולה להיעשות באמצעות מפעיל נקודה (.), לפניו משתנה האיחוד ופעל אחר חברו של אותו משתנה.
u1.x = 10;
כמו מבנים, האתחול המצטבר אינו אפשרי באיחוד. כידוע, האיחוד חולק את אותו מיקום זיכרון עבור כל החבר בו זמנית רק מאתחל משתנה אחד וכל המשתנה מתעדכן אוטומטית בערך המאושר.
u1.x = 10; cout <
אם תנסה לשנות את הערך של כל חבר ב- 'u1'. החבר השני יתעדכן אוטומטית לערך זה.
u1.c = 65; cout <
המרחב שהוקצה לאיגוד שווה לגודלו של החבר הגדול ביותר באיגוד. מכיוון שהבית שהוקצה ל'Char 'הוא 1 בתים,' int 'הוא 4 בתים ו-' float 'הוא 4 בתים כך שהגודל הגדול ביותר הוא 4 בתים. אז הזיכרון המוקצה ל- 'u1' ו- 'u2' הוא 4 בתים.
int main () {int size_1 = sizeof (u1); // גודל int 4__2 = sizeof (u2); // 4
ניתן ליצור את המצביע לאיחוד ממש כמו במבנה. המצביע מחזיק בכתובת של האיגוד.
איחוד u_type * un; un = & u1; cout < בדומה למבנה, האיחוד יכול להיות מועבר לפונקציות גם על ידי השיטות, קרי קריאה לפי ערך וקריאה לפי הפניה. פונקציה (u1); // פונקציית שיחות בשיטת שיחה לפי ערך. . . void funct (איחוד u_type un) {// receving הערך של חבר u1. cout < כעת, נקרא לפונקציה בשיטת שיחה לפי הפניה. פונקציה (& u1); // פונקציית שיחה באמצעות שיחה בשיטת רענון. . . void funct (איחוד u_type un) {// receving הכתובת של u1. un-> x = 20. } יש סוג מיוחד של איחוד ב- C ++ שנקרא "האיחוד האנונימי". לאיגוד האנונימי לא יכול להיות שם הסוג ולא ניתן ליצור שום משתנה של איחוד כזה. זה רק כדי לומר למהדר שמשתני החברים שלו צריכים לחלוק את אותו המיקום. ניתן להפנות את המשתנה של איחוד אנונימי ללא מפעיל הנקודה הרגילה (.). int main () {איחוד {// הגדר איחוד אנונימי ללא שם הסוג. int x, char c; לצוף f; }; x = 10; // הפנה את משתנה האיחוד עם מפעיל נקודה החוצה < באיגוד אנונימי אסור להשתמש בפונקציה של חברים, היא אינה יכולה להכיל נתונים פרטיים או מוגנים ויש לציין את האיחוד האנונימי הגלובלי כ"סטטי ". הנקודות שיש לזכור להכרזת האיחוד הרגילה. שניהם, מבנה ואיחוד הם סוג הנתונים המכולה המכיל חבר מסוגים שונים. אך משתמשים במבנים כאשר אנו צריכים לאחסן ערך מובהק עבור כל החברים במיקום זיכרון מובחן. האיגודים משמשים בעת הצורך בהמרת סוג.
קווי דמיון:
סיכום: