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;  
    }  
  • 相关阅读:
    SpringMVC金课-课程大纲
    Type Cannot change version of project facet Dynamic Web Module to 3.0.
    使用maven 创建web项目 + 搭建SSM框架
    多文件上传
    asp.net 连接access数据库方法
    分享代码
    DIV+CSS解决IE6,IE7,IE8,FF兼容问题(转至http://www.douban.com/note/163291324/)
    asp.net发布网站(转)
    Img垂直居中
    http://www.apkbus.com/android-6231-1.html
  • 原文地址:https://www.cnblogs.com/cLockey/p/4835575.html
Copyright © 2011-2022 走看看