ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
אבנראורח · ·
 

הודעה פורסם: 22/02/2015 - 01:27
נושא ההודעה: האם האופרטור << ב-C++ ממומש בקובץ כלשהו ב-C ואם כן איז

איך להגיע אליו?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/02/2015 - 11:47
נושא ההודעה:

האופרטור << הוא אופרטור bitwise.
מה שהוא עושה הוא לוקח את הערך הבינארי במשתנה ומזיז את כל הביטים מספר פעמים ימינה.

לדוגמה:
int x = 3;
x>>2

הערך הבינארי ב-x בשורה הראשונה הוא 00000000000000000000000000000011
בהנחה ו-int מכיל 32 ביט.
כעת אחרי השורה השניה, ערכו יהיה 00000000000000000000000000000
כלומר הזזנו 2 ביטים ימינה, ובמקומם הוכנסו 0-ים מימין (זה תלוי מעבד. יש כאלה שיכניסו 1-ים, אבל במקרים רבים מוכנסים 0-ים).

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

הודעה פורסם: 22/02/2015 - 11:49
נושא ההודעה:

C ו -C++ זה לא אותו דבר.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/02/2015 - 14:52
נושא ההודעה:

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

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

--לב
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/02/2015 - 15:46
נושא ההודעה:

זה אחד הדברים הנוראיים ב-C++ - שהם החליטו לדרוס את האופרטור << למשמעות של כתיבה ל-stream (במקום bitwise shift).
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/02/2015 - 16:44
נושא ההודעה:

Anonymous :
זה אחד הדברים הנוראיים ב-C++ - שהם החליטו לדרוס את האופרטור << למשמעות של כתיבה ל-stream (במקום bitwise shift).

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

הודעה פורסם: 22/02/2015 - 16:56
נושא ההודעה: המשך

קוד:

class PoinX {
private:
   int x, y;
 
public:
   PoinX();
   int getX() const; // Getters
   int getY() const;
   void setX(int x); // Setters
   void setY(int y);
 
   friend ostream & operator<<(ostream & out, const PoinX  point);
};
 

אפשר לגרום לזה להתקמפל למשל על ידי שינויים בספריה iostream או ostream שאם נוריד את המלה friend זה יתקמפל?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 22/02/2015 - 17:02
נושא ההודעה:

Anonymous :
Anonymous :
זה אחד הדברים הנוראיים ב-C++ - שהם החליטו לדרוס את האופרטור << למשמעות של כתיבה ל-stream (במקום bitwise shift).

צודק, bitwise shift על stream זו פעולה עם כל כך הרבה משמעות שלא היה שום הגון בלאבד אותה בשביל כתיבה וקריאה.


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

הודעה פורסם: 23/02/2015 - 19:18
נושא ההודעה: Re: המשך

השואל :
קוד:

class PoinX {
private:
   int x, y;
 
public:
   PoinX();
   int getX() const; // Getters
   int getY() const;
   void setX(int x); // Setters
   void setY(int y);
 
   friend ostream & operator<<(ostream & out, const PoinX  point);
};
 

אפשר לגרום לזה להתקמפל למשל על ידי שינויים בספריה iostream או ostream שאם נוריד את המלה friend זה יתקמפל?



קוד:
#include <iostream>

namespace zzz
{
class PoinX {

private:

   int x, y;

public:

   PoinX();

   int getX() const; // Getters

   int getY() const;

   void setX(int x); // Setters

   void setY(int y);

};

PoinX::PoinX():x(0),y(0)
{
}
int PoinX::getX() const
{
  return x;
}

int PoinX::getY() const
{
  return y;
}
std::ostream & operator<<(std::ostream & out, const PoinX  point)
{
   return out << point.getX() << " " << point.getY();
}
};


int main()
{
  zzz::PoinX x;
  std::cout << x << std::endl;
  return 0;
}
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח [אבנר]
  2. אורח
  3. אורח
  4. אורח
  5. אורח
  6. אורח
  7. אורח [השואל]
  8. אורח
  9. אורח