רוצה להיות מתכנת
New member
העמסת פונקציות באופרטור, ושיטה המוגדרת בתור const
1) בקוד הבא יש שני מימושים של אופרטור + : אחד בצורה "רגילה", ואחד בצורה של העמסת פונקציה.
כיצד יודע הקומפיילר במקרה הזה לזהות לאיזו שיטה לפנות בפועל מבלי שתהיה שגיאת ambiguity ?
כיצד בפועל מתאפשרת העמסת פונקציה לאופרטור ?
2) נתון הקוד הבא:
לגבי הפונקציה המוגדרת כ-const : למה שורה 7 גורמת לשגיאת קומפילציה ואילו שורה 8 לא גורמת לשגיאת קומפילציה?
1) בקוד הבא יש שני מימושים של אופרטור + : אחד בצורה "רגילה", ואחד בצורה של העמסת פונקציה.
קוד:
void main()
{
Point p1(5, 6);
Point p2 = p1 + 3;
p2.show();
}
class Point
{
int x, y;
public:
Point(int x = 0, int y = 0) : x(x), y(y) {}
Point add(const Point& other) const
{
return Point(x + other.x, y + other.y);
}
Point operator+(const Point& other) const
{
return Point(x + other.x, y + other.y);
}
Point operator+(int add) const
{
return Point(x + add, y + add);
}
void show() const
{
cout << "(" << x << ", " << y << ")\n";
}
};
כיצד יודע הקומפיילר במקרה הזה לזהות לאיזו שיטה לפנות בפועל מבלי שתהיה שגיאת ambiguity ?
כיצד בפועל מתאפשרת העמסת פונקציה לאופרטור ?
2) נתון הקוד הבא:
קוד:
1.class X {
2.public:
3.int x;
4.int *p;
5.X() : x(1), p(&x) {}
6.void g() const {
7.p = &x;
8.*p = 1;
9.}
10.};