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

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;  
}  

复制代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值