מצביע this
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 7 מתוך 104.
ב־C++, this הוא מצביע לאובייקט הנוכחי. השתמשו ב־this-> כדי לגשת לחברים, במיוחד כאשר שמות הפרמטרים תואמים לשמות החברים.
ללא this, הפרמטר מסתיר את איבר המחלקה
void Player::setName(std::string name) {
name = name; // מקצה את הפרמטר לעצמו! שדה המחלקה נותר ללא שינוי.
}שימוש ב־this-> כדי להקצות ערכים בצורה נכונה
void Player::setName(std::string name) {
this->name = name; // מקצה את הפרמטר לשדה המחלקה
}שימוש ב־this-> במתודות
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}המצביע this תמיד מצביע על מופע האובייקט הנוכחי. בניגוד ל-Java ול-C#, שבהן this הוא הפניה, ב-C++ הוא מצביע, ולכן משתמשים ב--> במקום ב-. כדי לגשת לחברים.
אתגר
בינוניממש את המתודות של המחלקה Player באמצעות this-> כדי להבחין בין שדות לפרמטרים בעלי אותו שם:
- מתודות setter: השתמש ב-
this->כדי להציב את הפרמטרים בשדות getStatus(): השתמש ב-this->כדי לגשת לשדות, והחזר"<name> - Score: <score>, Level: <level>"
נסו בעצמכם
#include <iostream>
#include "Player.h"
int main() {
std::string name;
int score, level;
std::getline(std::cin, name);
std::cin >> score >> level;
Player player;
player.setName(name);
player.setScore(score);
player.setLevel(level);
std::cout << "Name: " << player.name << std::endl;
std::cout << "Score: " << player.score << std::endl;
std::cout << "Level: " << player.level << std::endl;
std::cout << player.getStatus() << std::endl;
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות OOP
קבצים חיצונייםבנייה וקומפילציה של C++קובצי Header וקובצי מקורמרחבי שמות והיקףמבוא ל-OOP ב-C++מחלקות לעומת אובייקטיםמצביע thisמתודות (פונקציות איבר)תכונות (חברי נתונים)יסודות הבנאים וההורסיםסיכום – מחשבון פשוט4מאפייני מחלקה
חברי מופע לעומת חברים סטטייםגטרים וסטריםפונקציות איבר קבועותמילת המפתח mutableמתודות ומשתנים סטטייםפונקציות ומחלקות ידידותסיכום – מנהל חשבונות בנק7ירושה
ירושה בסיסיתרמות גישה בירושהסדר הקריאות לבנאי ולמפרקדריסת מתודותפונקציות וירטואליות ו־VTableירושה מרובהירושה וירטואליתסיכום – היררכיית עובדים2ניהול זיכרון
זיכרון Stack לעומת Heapמצביעים והפניותזיכרון דינמי (new/delete)מצביעים חכמים ב-C++RAII ב-C++סיכום – מנהל מערכים דינמיים5כימוס
מצייני גישה ב-C++מצייני גישה לעומקהסתרת מידעמבנה לעומת מחלקהמחלקות מקוננות ופנימיותסיכום – מערכת רשומות תלמידים8רב־צורתיות
רב־צורתיות בזמן קומפילציה לעומת בזמן ריצההעמסת פונקציותפונקציות וירטואליות — מבט נוסףפונקציות וירטואליות טהורותמחלקות מופשטותתכנון ממשקים ב־C++המרה דינמית ו־RTTIסיכום — מחשבון צורות3בנאים והורסים
בנאי ברירת מחדלבנאי עם פרמטריםבנאי העתקהבנאי העברהרשימות אתחול בבנאיםבנאים מאציליםמעמיקים בנושא הורסיםכלל השלושה / החמישה / האפססיכום – מחלקת String6העמסת אופרטורים
מבוא להעמסת אופרטוריםהעמסת אופרטורים אריתמטייםהעמסת אופרטורי השוואהאופרטורי זרםהעמסת אופרטור השמההעמסת האופרטורים [] ו־()אופרטורים להמרת טיפוסיםסיכום – מחלקת Matrix9תבניות
תבניות פונקציהתבניות מחלקההתמחות תבניותתבניות ארגומנטים משתנותיסודות SFINAE ותכונות טיפוסיםסיכום – מכל גנריתרגלו בעצמכם: קומפיילר C++ אונליין