8

我正在学习 C++ 中 OOP 的基本概念,但遇到了一个逻辑问题。

#include <iostream>
#include <conio.h>

using namespace std;

class A {
    int i;
public:
    void set(int x) {
        i=x;
    }
    int get() {
        return i;
    }
    void cpy(A x) {
        i=x.i; 
    }
};

int main()
{
    A x, y;
    x.set(10);
    y.set(20);

    cout << x.get() << "\t" << y.get() << endl;
    x.cpy(y);
    cout << x.get() << "\t" << y.get() << endl;
    getch();
}

我想在上面的代码中知道为什么我能够访问x.i[Line 19] ,它是不同对象中的私有成员。即使对象作为参数传递,私有范围是否限制在同一个类中?

4

6 回答 6

13

private在 C++ 中意味着类私有,而不是对象私有。两种解释都是可能的,确实有些语言选择了另一种。但是大多数语言在这方面就像 C++,允许同一类的对象访问另一个实例的私有成员。

于 2012-06-03T17:00:50.160 回答
5

变量xy是同一类的两个实例。它们是不同的对象,但它们确实属于同一类。这就是为什么可以从成员函数访问私有成员的原因。

于 2012-06-03T16:55:49.523 回答
2

类的私有属性或方法意味着不能从类范围之外直接访问它。因为公共方法是在一个类中定义的,我们可以通过它访问和操作私有成员的值。

在上面的示例中,您不是直接'i'从对象访问,而是通过公共方法对其进行操作。

可以这样想:你有一个银行账户,你在银行里的钱是私人成员。你不能直接去银行自己取钱。银行出纳就像一个公共方法,可以访问私有财产,即你的钱,你可以通过出纳操纵你的钱。

于 2017-05-20T10:09:57.413 回答
0

cpy(A x)是类的成员,它可以访问private字段和方法。

private关键字限制来自其他类(对象)的实例访问字段。属于一个类的任何代码都可以访问它自己的私有成员(字段或方法)。

于 2012-06-03T16:53:50.977 回答
0

一个类可以访问它自己的私有数据成员。

这也意味着如果您有任何处理两个或多个实例的函数(this以及作为参数传递的东西),您可以访问对象的私有(和公共)变量/方法

于 2012-06-03T16:53:57.723 回答
0

即使将对象作为参数传递,私有范围是否也仅限于同一个类?

是的,这就是访问同一类(即Ax类)中的私有成员的情况。i

于 2016-10-14T11:04:26.993 回答