C++:private成员的访问

C++: private成员的访问

标签:C++ private class

by 小威威

我们先来看一段代码:

# include <iostream>

using namespace std;

class Box {
    public:
        int x1;
        Box() {
            x1 = 0;
            x2 = 0;
    }
        Box(int x3, int x4) {
            x1 = x3;
            x2 = x4;
    }
        Box (const int& box) {
            x1 = box.x1;
            x2 = box.x2;    // True
    }
        Box add (Box box) {
            return (x1+box.x1, x2+box.x2);   // True
    }
    private:
        int x2;
};
int main(void) {
    Box box;
    cout << "box:" << endl;
    cout << "x1 = " << box.x1 << endl;
    cout << "x2 = " << box.x2 << endl;   // Error
    return 0;
}

也许你看到这段代码并没有发现什么矛盾之处,说明你对private成员的概念把握地很准确。我这篇文章是提供给与我一样陷入误区的童鞋。

我们知道,private成员是数据隐藏的一种手段,它使得类外结构不能访问private数据。在main函数中,box.x1是正确的,因为x1是Box类中的public成员,类外部的成员可以访问它。但是,box.x2就不对了,因为x2是Box类中的private成员,外部成员不能直接访问。这时你可能会感到奇怪,在类Box的定义中也出现了box.x2,为什么它就不会出错呢?

哈哈,这就是对private成员的概念了解的不够透彻而导致的误区。我们知道,类的成员可以访问该类中的所有成员,包括private成员。那么在类的定义里,出现box.x2是没有问题的。因为这个语句出现在类Box的定义中,也就是类内成员访问本类的private成员。但是在main函数中就不一样了。在main函数里访问private,就相当于main函数访问类Box的private成员,main函数是外部成员,却又访问类Box的私有成员,显然main的权限不够。因此这个语句会编译出错。

以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!

你可能感兴趣的:(C++,namespace,Class,private)