לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #10  
ישן 21-04-2007, 15:08
  danben danben אינו מחובר  
 
חבר מתאריך: 19.06.03
הודעות: 549
לגבי העניין שב C++ אין מקום לשימוש ב VOID PTR
בתגובה להודעה מספר 9 שנכתבה על ידי zivbr שמתחילה ב "בסי אין overloaded functions..."

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

אבל באופן עקרוני - אין מניעה להשתמש בזה.

אם אתה מגיע למצב ב C++ שאתה צריך VOID* אתה צריך אולי לשאול את עצמך האם הDESIGN שלך נעשה בצורה טובה ונכונה.

נניח ואתה מתכנן מערכת כלשהי, אולי תכנון נכון היה ליצור מחלקה וירטואלית שתכיל הצהרות למטודות שהיית רוצה שכל אובייקט במערכת יידע לעשות (נניח פעולות של סיריאליזציה וכו').
כל אובייקט שיירש מהמחלקה הזו גם יהיה חייב לממש את המטודות האלה וגם תוכל להתייחס אליו כאל בן של המחלקה (פולימורפיזם) וככה בעצם אתה נמנע מלהשתמש במצביע ל VOID*.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 21-04-2007, 14:55
  danben danben אינו מחובר  
 
חבר מתאריך: 19.06.03
הודעות: 549
בתגובה להודעה מספר 8 שנכתבה על ידי eXtruct שמתחילה ב "סורי טעות שלי :X כלומר אני..."

ציטוט:
במקור נכתב על ידי eXtruct
סורי טעות שלי :X
כלומר אני יכול להגיד פונקציה ככה
קוד:
void func(void *var); ולזמן אותה ככה:
int abc; func(abc); וגם char bcd; func(bcd); וגם float cde; func(cde);

וכל אלו יהיו חוקיים? וזה יעבוד רק במקרה והפונקציה יודעת לטפל בסוגי משתנים שונים, נכון?
אם כן אז למה void* עדיף על function overload?

כמו כן אני יכול לעשות גם ככה:
קוד:
void *abc; *abc = (int *)10; or *abc = (char *)'s'; or *abc = (float *)3.1415;

וגם כל אלה יהיו חוקיים?

תודה שוב.


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

קוד:
void func(void *var); ולזמן אותה ככה:
int abc; func(&abc); וגם char bcd; func(&bcd); וגם float cde; func(&cde);



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

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

מציע לך לקרוא את פרק מס' 5 ב K&R ואני בטוח שהכל יהיה הרבה יותר ברור אחרי שתקרא שם.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 23-04-2007, 06:49
  משתמש זכר LinkBomber LinkBomber אינו מחובר  
 
חבר מתאריך: 31.03.02
הודעות: 400
יש דבר מאוד חשוב שאף אחד לא אמר
בתגובה להודעה מספר 1 שנכתבה על ידי eXtruct שמתחילה ב "מצביע ל void, טיפוס נתונים void מה זה בעצם?"

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

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

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://www.fresh.co.il/scripts/birthday.php?date=29/04/1987]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

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

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:20

הדף נוצר ב 0.05 שניות עם 11 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2026 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר