עוד שאלה
#include <iostream.h> class Ccomplex { public: float real; float imaginary; Ccomplex(); //constructor for known numbers Ccomplex(short a) {real=0; imaginary=0;}; //constructor for calculated numbers Ccomplex operator + (Ccomplex a); void show_num(); }; Ccomplex::Ccomplex() { cout<<"\ninsert the real part: "; cin>>real; cout<<"insert the imaginary part: "; cin>>imaginary; } Ccomplex:
perator+(Ccomplex a) { Ccomplex temp(1); temp.real=real+a.real; temp.imaginary=imaginary+a.imaginary; return temp; } void Ccomplex::show_num() { cout<<"\nThe number is: "<<real<<"+"<<imaginary<<"i\n"; } int main() { Ccomplex num1, num2; Ccomplex num3(1); num3=num1.operator+(num2); num3.show_num(); return 0; }
כמו שבטח ניחשתם, זה אמור לסכם שני מספרים מרוכבים. שאלות: 1. למה זה לא עובד. 2. אני יודע שכדי להפעיל את הפונקציה של האופרטור יכולתי לכתוב גם num3=num1+num2. אבל אם אני כותב ככה, איך הוא יודע שה + הוא member של האובייקט num2? כי הוא מופיע לפניו? זו פשוט צורת רישום מקוצרת? 3. הייתי זקוק לשני constructors, הבעייה היא שלמעשה באף אחד מהם אין לי צורך בפרמטרים, אז כדי להבדיל ביניהם הוספתי פרמטר (short) שלמעשה אין לי צורך בו. יש דרך יותר אלגנטית לעשות את זה? תודה רבה!