本类对象的引用作为参数,可以直接访问其私有成员

https://www.cnblogs.com/cLockey/p/4835575.html

昨天参加了完美世界的笔试,有一个题是写出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;  
}  

复制代码

猜你喜欢

转载自blog.csdn.net/u010029439/article/details/88540199