ההבדל בין Class ו- Struct ההבדל בין

Anonim

לפני שנבין את ההבדל בין Class ו- Struct, עלינו לדעת כמה מושגים בסיסיים הקשורים אליהם. ללא הבנה של מושגים, קשה להבין את ההבדלים בין השניים.

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

תחביר של מחלקה

מחלקה חנות {

דברים ציבוריים מחרוזת;

עיצוב מחרוזת ציבורית;

} תחביר של אובייקט

חנות מכולת = חנות חדשה ();

Store Stationery = new Store ();

מהו מבנה?

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

-> ->

struct grocery_entrance {

char entry_name [50];

int entry_size;

} grocery_entrance;

כל החנויות יכולות להשתמש ב'כניסה 'עם שמות וגדלים נפרדים.

מה זה ירושה?

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

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

איך הם שונים?

שימושיות מחדש:

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

  • נראות: כל הפונקציות בכיתה זמינות לציבור לאובייקטים שלה.לדוגמה, יש לנו פונקציה בשם 'דברים' תחת 'חנות'. הפונקציה 'דברים' נראית לכל אובייקטים שלה, כגון 'חנות מכולת', חנות נייר מכתבים 'וכו'. חשיפה כזו אינה אפשרית עם Structs שכן נתוני המבנה מוגבלים לעצמם ולא נראים למבנים אחרים. כדי להבהיר דברים, אנו יכולים לומר כי הנתונים של "grocery_entrance" אינו גלוי לציבור לכל חנויות אחרות.
  • מעבר לפי סימוכין ועובר לפי ערך: מעבר לפי סימוכין שולח רק את מיקום הזיכרון ולא את הנתונים בפועל לפונקציות. כלומר, בכל פעם שהערך משתנה, השינוי בא לידי ביטוי בפונקציות המתאימות. מעבר לפי ערך, בתורו, הוא פשוט שולח את הערך לפונקציה. במקרה זה, שינוי הערך לאחר שיישלח לא יבוא לידי ביטוי בפונקציה. השימושים ב- Class עוברים בהפניה, ו- Struct משתמש בהעברת ערך.
  • ירושה: החוגים יכולים להיות מורשים עוד יותר כדי ליצור תת כיתות, אבל מבנים לא יכול לנצל ירושה. לדוגמה, מחלקה מחלקה נותן את הפונקציות שלה ל"מכולת מכולת ". אבל "grocery_entrance" של מבנה לא יכול לרשת כל פונקציה. אנחנו יכולים לומר שאין כאן מושג כמו תת-מבנה.
  • ברירת המחדל של החשיפה: כל חברי הכיתה נשמרים כגופים פרטיים כברירת מחדל, בעוד שחברי מבנה נשמרים כגופים ציבוריים כברירת מחדל.
  • הגודל של מחלקה ריקה ומבנה: מחלקה משתמשת בגודל של 1 בתים גם כאשר היא ריקה, בעוד ש- Struct לעולם לא משתמש בזיכרון כלשהו כאשר הוא ריק. משמעות הדבר היא שאנו יכולים לומר כי גודל של מבנה ריק שווה 0 בתים.
  • איסוף אשפה: איסוף אשפה אפשרי עם כיתות, כפי שהם משתמשים לעבור על ידי הפניה. לכן, קל יותר לבצע את הניקוי במקום אחד שבו מאוחסנים הנתונים. מצד שני, איסוף אשפה אינו אפשרי עם Struct, כפי שהיא משתמשת עוברת לפי ערך את הנתונים מפוזרים במקומות שונים.
  • ניהול זיכרון: מכיוון ש- Class מאפשרת אוספי אשפה, ניהול הזיכרון יעיל גם; עם זאת, זה לא יעיל עם Structs.
  • בנאי: בנאי בדרך כלל מאתחל את הכיתה עם ערכים מסוימים שצוינו. אנחנו יכולים להסתכל על זה כמו משהו כי כבר מאותחל עם ערכים. אם יש ליצור מחלקה חדשה, הבנאי נקרא להקצות זיכרון למופע זה. אנחנו יכולים אפילו להעביר ערכים כמו ויכוחים בעת קורא בנאי. בואו ניגש לדיון שלנו עכשיו. השיעורים מאפשרים לבנאים מכל הסוגים, כגון עם או בלי טיעונים, בעוד שבניינים מאפשרים רק לבונים עם ויכוחים, i. ה. את הבנאים פרמטרים.
  • הרס: הורס נקרא בכל פעם שאנחנו צריכים למחוק מופע של מחלקה. ההרס, בתורו, מוחק את המופע ומשחרר את הזיכרון. מחלקה יכולה להשתמש בהרס, בעוד ש- Struct אינו יכול.
  • משתנים חבר לאתחול: ב חוגים, אנחנו יכולים לאתחל את המשתנים חבר ישירות; לא ניתן לבצע אתחול כזה עם Structs.
  • יצירת אובייקט: התחביר הכללי ליצירת אובייקטים בשיעורים הוא:
  • הדגמה obj = הדגמה חדשה (); משמעות הדבר היא שעלינו להשתמש במילת המפתח 'חדש' בעת יצירת אובייקטים של מחלקה.זה לא נדרש בעת יצירת אובייקטים של מבנים. רק תסתכל על התחביר שלהם:

הדגמה obj;

זה עובד בצורה מושלמת גם ללא מילת המפתח 'חדש'.

מתי להשתמש במחלקה ומתי להשתמש ב- Struct?

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

כיצד להמיר מבנה לכיתה ו סגן Versa?

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

הבה נבחן את ההבדלים הנ"ל בצורת טבלה.

S. לא

מושגים

ההבדלים מחלקה מבנה
1 שימושיות-מחדש
לחלוטין לשימוש חוזר לא ניתן לשימוש חוזר 2 כל הפונקציות של מחלקה גלויים לאובייקטים שלה
הנתונים של אובייקט של מבנה אינם גלויים לאובייקטים אחרים של אותו מבנה 3 מעבר לפי סימוכין ועבור ערך > שימושים עוברים לפי סימוכין שימושים עוברים לפי ערך
4 ירושה הפונקציות של הכיתה יכולות לעבור בירושה על ידי תת-הקבוצות שלה; מאפשר ירושה אף פעם לא מורשת
5 ברירת מחדל של חשיפות כל חברי הכיתה הם פרטיים כברירת מחדל כל חברי מבנה הם ציבוריים כברירת מחדל
6 גודל כאשר רוקן הגודל של מחלקה ריקה הוא 1 בתים הגודל של מבנה ריק הוא 0 בתים
7 אוסף אשפה כפי שהוא משתמש עובר על ידי הפניה, איסוף אשפה אפשרי כפי שהיא משתמשת עוברת לפי ערך, איסוף אשפה אינו אפשרי
8 ניהול זיכרון הקלות של תהליך איסוף אשפה מסייע בניהול זיכרון יעיל חוסר איסוף אשפה תוצאות גרועות ניהול זיכרון
9 בונים מאפשר בוני מכל הסוגים, כגון עם או בלי פרמטרים רק מאפשר בוני פרמטרים
10 הרסנים יכול להשתמש בו לא יכול השתמש בה
11 משתני חבר לאתחול מאפשר אתחול ישיר של משתני חבר אינו מאפשר אתחול מילה ישירה של משתני חבר
12 < יצירת אובייקטים זה חייב להשתמש במילת המפתח 'חדש' במהלך יצירת אובייקטים זה אופציונלי להשתמש במילת המפתח 'חדש' במהלך יצירת אובייקטים 13
מתי להשתמש? טוב יותר עבור אובייקטים גדולים ומורכבים שבהם נדרשת ירושה טוב יותר עבור אובייקטים קטנים ופשוטים יותר, שבהם ירושה היא פחות חשובה. כמעט כיסינו את כל ההבדלים בין Class ו- Struct, ואם אתה מרגיש שמשהו חסר, אנא יידע אותנו. בואו ללמוד יחד ולהפיק את רוב הידע הזה!