看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 1. :: 的功能除了 取 static, 宣告 member function, 為什麼也可以在member裡取用object的member(非class的member) ex: class point{public: int x; int getX();} int point::getX(){ return point::x; }; 2.1 還有啊就是參數名跟member名一樣時 ex void setX(int x){ x = x; } 為什麼編譯器會知道是 this->x = x; 而不是 x = this->x or x = x; 2.2 我用 cout 出 x 跟 this->x 的值也不一樣 x 就是參數 this->x 就是member x 他們的優先權是如果定義的??? 3. 我用 point 實作 自己定義的 printable class 裡的 const char* toString(); 本來是想在 printable class 定義一個 char a[15] 來放 ( %x , %y ) 文字 後來發現這樣每個class size高達36 因為我只是一個空間來放文字的 address的 所以想說用 static 改之前 printable class 裡 const char* printBuffer[15]; point 裡的 toString(); const char* Point::toString() { sprintf(this->printBuffer, "( %d, %d)", this->x, this->y); return this->printBuffer; } 這樣 OK 可是我把 printable class 裡的printBuffer 加個static static const char* printBuffer[15]; const char* Point::toString() { sprintf(Point::printBuffer, "( %d, %d)", this->x, this->y); return Point::printBuffer; } 這樣GG dev-c++ debugger說 undefined reference to Point::printBuffer 4. 承 3跟2 如果我要在 member function 裡 存取自己class裡的member時 使用 ClassName::Member 不就會混掉!? 希望得到的正確結果: 可以跑 沒有error 程式跑出來的錯誤結果: debugger says: [Linker Error] undefined refenence to Point::printBuffer 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) dev-c++ on windows xp 有問題的code: (請善用置底文標色功能) the above 補充說明: 懇請幫忙了!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.132.251
softwind:1.多重繼承? 2.加了static就變成class的member 11/22 01:22
jaw109:1. ::是描述一種name space的階層關係 11/22 12:55
jaw109: 就好像 [高雄縣::岡山鎮::中山路] 一樣 11/22 12:56
jaw109: 例 std::cout 11/22 12:57
jaw109:2. compiler很聰明不代表看code的人就很聰明 11/22 12:57
jaw109: 你能期待看code的人要花多久時間了解你的 x=x; ? 11/22 12:58
ot32em:感謝大家的回答! 原來::不是static跟namespace專用!! 11/22 17:30