本類對象的引用作為參數,可以直接訪問其私有成員


昨天參加了完美世界的筆試,有一個題是寫出C++中String類的構造函數,析構函數,拷貝構造函數和賦值函數。

題中給出了四個函數的接口,大致如下所示。

class String{
public:
    String(const char* str=NULL);                
    String(const String &other);                 
    String& operator=(const String& other);       
  ~String(void) {delete[] m_data;} private: char *m_data; // 用於保存字符串 };

當時一直想不明白在拷貝構造和賦值函數中,怎么獲取參數的私有成員,導致這個題沒答出來。

回來查了一下String類的實現才明白,封裝性是對類外的操作來說的,在類內操作本類的一個對象時,可以通過該對象訪問其私有成員,這種設計也是挺合理的,因為類是自己設計的,當然自己也就知道類的內部結構,所以沒有必要對自己也進行類的“封裝”。另有一種說法是:“同種類之間是友元關系”。

所以對於拷貝構造函數和賦值函數按下面方法寫是沒問題的。

inline String::String(const String &other)  
{  
    if(!other.m_data)m_data=0;
    else   
    {  
        m_data=new char[strlen(other.m_data)+1];  
        strcpy(m_data,other.m_data);  
    }  
}  
  
inline String& String::operator=(const String& other)  
{  
    if (this!=&other)  
    {  
        delete[] m_data;  
        if(!other.m_data) m_data=0;  
        else  
        {  
            m_data = new char[strlen(other.m_data)+1];  
            strcpy(m_data,other.m_data);  
        }  
    }  
    return *this;  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM