构造函数为啥能访问参数的私有数据成员

发布于 2022-09-03 15:24:51 字数 1497 浏览 12 评论 0

对于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

求解答

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终弃我 2022-09-10 15:24:51

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文