線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1166
推到 Plurk!
推到 Facebook!

運算子多載問題

答題得分者是:justdo
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-25 04:15:53 IP:59.104.xxx.xxx 未訂閱
    #include 
#include 
using namespace std;
class CWin    // 定義視窗類別CWin
{
   private:
     char id;
     int width, height;
     
   public:     
     CWin(char i,int w,int h):id(i),width(w),height(h) // 建構元 
     {}
   
     int operator>(CWin &win)   // 定義運算子「>」的多載
     {
        return(this->area() > win.area());
     }
    
     int area(void)  
     {
        return width*height;
     }  
   
};    int main(void)
{
   CWin win1('A',70,80);                
   CWin win2('B',60,90);                         
              
   if(win1.operator>(win2))    // 判別win1與win2物件之面積的大小
      cout <<"win1 is larger than win2"<    上面程式碼是正確的    為什麼將下面這幾段定義放到class外去定義就不行?是什麼原因 , 感覺上運算子多載用法跟一般函式用法差不多    int operator>(CWin &win)   // 定義運算子「>」的多載
{
   return(this->area() > win.area());
}        下面是編譯器出現的錯誤不太懂錯誤原因嗎??懂的朋友可以說一下嗎?     二元運算子 'operator >' 的參數太少 
 全域函式沒有 'this' 指標   
 '->area' 的左邊必須指向類別/結構/等位
 '>' : 不是 'CWin' 的成員        謝謝        發表人 - syao 於 2005/09/25  04:22:15
        
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-25 20:37:55 IP:221.169.xxx.xxx 未訂閱
二元運算子 'operator >' 的參數太少 > 這個運算子需要有兩個參數,分別是>的左邊跟右邊 當在class宣告的時候,會自動將該類別視為左邊被比較的物件 但是放在全域的地方宣告時,就要放兩個參數了 因此,你應該宣告成 int operator>(CWin &lwin, CWin &rwin); ============ 全域函式沒有 'this' 指標 不知道你是否瞭解this是什麼東西... 當該運算子在類別內部的時候,this會取得自己所屬物件的指標 但是放在全域區的時候,this並沒有定義 ============
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-25 21:17:14 IP:59.104.xxx.xxx 未訂閱
justdo謝謝大概了解^^
系統時間:2024-05-18 6:05:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!