c++ - 构造函数为啥能访问参数的私有数据成员
PHPz
PHPz 2017-04-17 14:35:49
[C++讨论组]
对于c++ private数据成员访问的问题: 
class MyClass
{
public:
    MyClass(const char* str = NULL)
    {
        if(str == NULL)
        {
            m_data = new char[1];
            *m_data = '\0';
        }
        else
        {
            int len = strlen(str);
            m_data = new char[len + 1];
            strcpy(m_data,str);
        }
    }

    MyClass(const MyClass &other)
    {
        printf("%s\n" , other.m_data );
    }

    ~MyClass(void)
    {
        delete [] m_data;
    }
private:
    char *m_data;
};


MyClass* tmp = new MyClass("a");
MyClass tmp1 = *tmp; // a

上述代码的拷贝构造函数可以访问到参数的private数据成员,这个怎么理解?

后续又添加了个测试函数,发现还是可以访问

class MyClass1
{
public:
    MyClass1(const char* str = NULL);
    MyClass1(const MyClass1 &other);
    ~MyClass1(void);

    void TestPri(const MyClass1 &other);

private:
    char *m_data;
};

MyClass1::MyClass1(const char* str)
{
    if(str == NULL)
    {
        m_data = new char[1];
        *m_data = '\0';
    }
    else
    {
        int len = strlen(str);
        m_data = new char[len + 1];
        strcpy(m_data,str);
    }
}

MyClass1::MyClass1(const MyClass1 &other)
{
    printf("%s\n" , other.m_data );
}

MyClass1::~MyClass1(void)
{
    delete [] m_data;
}

void MyClass1::TestPri(const MyClass1 &other)
{
    printf("%s\n" , other.m_data );
}
MyClass1* tmp = new MyClass1("a");
MyClass1 tmp1 = *tmp; // a
MyClass1 tmp2;
tmp2.TestPri(*tmp); // a

求解答

PHPz
PHPz

学习是最好的投资!

全部回复(1)
阿神

访问控制权限是以类为单位的,而不是对象。正是这个原因,成员函数可以访问该类对象的私有成员变量,但是不可以访问其它类的对象的私有成员。这里有个相似的问题:http://stackoverflow.com/ques...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号