Class exer.2 Q2

קושיה

לאחר שהגדנו את המחלקה בשאלה 1

עם דיפולט קונסטרקטור ל-

POINT

 

וכעט אנו מתבקשים להגדיר מחלקה חדשה עם מעגל

שמרכזו אובייקט מטיפוס נקודה

ועם דיפולט קונסטרקטור שיוצר מעגל

עם מרכז דיפולטיבי 

(0,0)

אז האם קונסטרקטור הבא נכון?

Circle(Point center = Point(), unsigned radius = 1) :m_center(center), m_radius(radius) {}

אני שואל מכיוון שגם ככה מאותחל נקודה ל- 0,0 באופן דיפולטיבי אז לפי מה שלמדנו אתמול ייתכן שמספיק להגדיר קונסטרקטור כזה

Circle(unsigned radius = 1) :m_radius(radius) {}

נכון?????

Add Comment
6 Answer(s)

מותר לך כן

זה אמור להיות בנוי בצורה הבאה

Point center = Point();

Circle(center, unsigned radius = 1) :m_center(center), m_radius(radius) {}
Answered on December 19, 2018.
Add Comment

יש לך POINT

קראת לו CENTER

Answered on December 19, 2018.
Add Comment

אבל יש POINT בארגומנט

Answered on December 19, 2018.
Add Comment

הגדרתי פוינט שקראתי לו סנטר

ואת הסנטר שמתי כארגומנט בסיקל

Answered on December 19, 2018.
Add Comment

אתה חייב להגדיר פוינט לפני

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

Answered on December 19, 2018.
Add Comment

Gr8 Shmuel answer 🙂

 

//hello Shay
//about your first line:

Circle(Point center = Point(), unsigned radius = 1) :m_center(center),
m_radius(radius) {}

//the above works, but we could make it better:

Circle(const Point &center = Point(), unsigned radius = 1)
:m_center(center), m_radius(radius) {}

//this avoids unnecessary copying, and can work with rvalues as well
meaning ..

Circle c1(Point(1,2))

// .. is legal

//about your second line, it also works for the “default constructor”
case:

Circle(unsigned radius = 1) : m_radius(radius) {}

//However I’m not sure I’m fond of this style since it’s not descriptive
enough about what it does

//The question probably expected an answer not involving the use of
default parameters. meaning:
Circle() : m_center(), radius() {}
Circle(const Point &center, int radius) : m_center(center),
m_radius(radius) {}
Circle(const Point &center) : m_center(center), m_radius(radius) {}
Circle(int radius) : m_center(), m_radius(radius) {}

//this has the added advatage of being able to do both of the following:

Circle c1(5);
Circle c2(Point(10,20));

//with the obvious disadvantage of repeating ourselves.
//you can also research “C++11 delegating constructors” for an
alternative

//Good day,
//Shmuel

Answered on December 21, 2018.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.