我怎样才能访问班级的私人数据成员?

时间:2016-02-20 16:59:46

标签: c++ oop

我正在学习C ++中的OOP,而且我几乎了解它的大部分基础知识。但这是我的疑问。我了解到我们无法从其他对象访问私有数据成员。但我有一个似乎正在这样做的代码片段。它工作得很好,但我想知道,为什么以及这段代码如何工作?这不违反OOP规则吗?

以下是代码:

#include "iostream"

using namespace std;

class Dist {
int feet;          //private by default
float inches;      //private by default
public:
void getdata()
{
    cout<<"Enter the feets: ";
    cin>>feet;
    cout<<"Enter the inches: ";
    cin>>inches;
}
void putdata()
{
    cout<<"Data is "<<feet<<"\' "<<inches<<"\" "<<endl;
}
void add(Dist d)
{
    this->feet = this->feet + d.feet;// accessing private data members!
    this->inches = this->inches + d.inches;
    if (this->inches >= 12) {
        this->feet++;
        this->inches = this->inches - 12;
    }
}
};

int main()
{
Dist d1,d2;
d1.getdata();
d2.getdata();
d1.add(d2);
d1.putdata();
return 0;
}

这怎么可能?

3 个答案:

答案 0 :(得分:3)

如果你的意思是这部分代码:

void add(Dist d){
    this->feet = this->feet + d.feet;// accessing private data members!
    this->inches = this->inches + d.inches;
    /* ... */
}

然后它完全正常,因为thisd都是类Dist的对象。重要的是,它们是相同的,而不是相同的对象

有关详细说明,请参阅Why do objects of the same class have access to each other's private data?

答案 1 :(得分:1)

不,没关系。私人会员的访问权限仅限于班级中的职能;无论函数本身是私有的,受保护的还是公共的。

由于您的功能是公开的,因此可以通过班级实例访问它们。

请注意,具有类实例作为参数的函数也可以访问这些类的私有成员 - 如果不是这样,那么编写像复制构造函数和赋值运算符这样的代码将很困难。

答案 2 :(得分:1)

私有表示您无法从课外访问数据。

班级的其他成员仍然可以访问它们,即使它们是公开的。

这样的东西
d1.feet;

虽然无效。