zoukankan      html  css  js  c++  java
  • 本类对象的引用作为参数,可以直接访问其私有成员

    昨天参加了完美世界的笔试,有一个题是写出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;  
    }  
  • 相关阅读:
    BZOJ 2212/BZOJ 3702
    BZOJ 4761 Cow Navigation
    BZOJ 3209 花神的数论题
    BZOJ 4760 Hoof, Paper, Scissors
    BZOJ 3620 似乎在梦中见过的样子
    BZOJ 3940 Censoring
    BZOJ 3942 Censoring
    BZOJ 3571 画框
    BZOJ 1937 最小生成树
    BZOJ 1058 报表统计
  • 原文地址:https://www.cnblogs.com/cLockey/p/4835575.html
Copyright © 2011-2022 走看看