ההבדל בין מבנה לאיחוד

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 1 אַפּרִיל 2021
תאריך עדכון: 15 מאי 2024
Anonim
סרטון 8 הכנסייה הקתולית
וִידֵאוֹ: סרטון 8 הכנסייה הקתולית

תוֹכֶן


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

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

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

טבלת השוואה

בסיס השוואהמבנהאיחוד
בסיסימיקום הזיכרון הנפרד מוקצה לכל אחד מהחברים במבנה.כל חברי האיגוד חולקים את אותו מיקום זיכרון.
הצהרה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 <איקס; // 10

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

פונקציה (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; // הפנה את משתנה האיחוד עם מפעיל נקודה החוצה <

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

הנקודות שיש לזכור להכרזת האיחוד הרגילה.

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

קווי דמיון:

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

סיכום:

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