程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第14章 重載操作符與轉換(5)

第14章 重載操作符與轉換(5)

編輯:C++入門知識

14.6 成員訪問操作符
箭頭操作符必須定義為類成員函數。解引用操作符不要求定義為成員,但將它作為成員一般也是正確的。
1. 構建更安全的指針

class ScrPtr 

    friend class FooPtr; 
    size_t use; 
    Foo *f; 
    ScrPtr(Foo *foo):f(foo),use(1){} 
    ~ScrPtr() 
    { 
        delete f; 
    } 
}; 
 
class FooPtr 

public: 
    FooPtr(Foo *f):ptr(new ScrPtr(f)){} 
    ~FooPtr() 
    { 
        if(--ptr->use==0) 
            delete ptr; 
    } 
    FooPtr(const FooPtr &fptr):ptr(fptr.ptr) 
    { 
        ++ptr->use; 
    } 
    FooPtr &operator=(const FooPtr &fptr); 
private: 
    ScrPtr *ptr; 
}; 
2. 支持指針操作

Foo &operator*() 

    return *(ptr->f); 

Foo *operator->() 

    return ptr->f; 

const Foo &operator*() const 

    return *(ptr->f); 

const Foo *operator->() const 

    return ptr->f; 

3. 重載解引用操作符
像下標操作符一樣,我們需要解引用操作符的const和非const版本。它們的區別在於返回類型:const成員返回const引用以防止用戶改變基礎對象。
4. 重載箭頭操作符
箭頭操作符與眾不同,它可能表現得像二元操作符一樣。這裡沒有第二個形參,因為->的右操作數不是表達式,相反,是對應著類成員的一個標識符。沒有明顯可行的途徑將一個標識符作為形參傳遞給函數,相反,由編譯器處理獲取成員的工作。
重載箭頭操作符必須返回指向類類型的指針,或者返回定義了自己的箭頭操作符的類類型對象。

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved