面向对象的编程逻辑

Object Oriented Programming Logic

本文关键字:编程 面向对象的      更新时间:2023-10-16

我正在学习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 [第 19 行],它是不同对象中的私有成员。即使对象作为参数传递,私有作用域是否仅限于同一类?

private 在 C++ 中表示对类私有,而不是对对象私有。这两种解释都是可能的,事实上有些语言选择了另一种。但是大多数语言都像C++,并允许同一类的对象访问另一个实例的私有成员。

变量

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

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

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

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

cpy(A x)

类的成员,它可以访问private字段和方法。

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

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

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

即使

对象作为参数传递,私有作用域是否仅限于同一类?

是的,这就是x访问同一类(即 A 类)中的私有成员i时发生的情况。