为什么我可以访问其他班级的私人成员? [重复]

问题描述 投票:0回答:2
class Complex
{
private:
    float real, imaginary;
public:
    Complex(float real, float imaginary)
    {
        this->real = real;
        this->imaginary = imaginary;
    }
    float getReal() const
    {
        return this->real;
    }
    float getImaginary() const
    {
        return this->imaginary;
    }
    Complex operator+(Complex other)
    {
        return Complex(this->real + other.real, this->imaginary + other.imaginary); // Here I can access other class' private member without using getter methods.
    }
};

int main()
{
    Complex first(5, 2);
    Complex second(7, 12);
    Complex result = first + second; // No error
    std::cout << result.getReal() << " + " << result.getImaginary() << "i"; // But here I have to use getters in order to access those members.
    return 0;
}

为什么我可以从另一个班级访问班级的私人成员?我以为我必须使用吸气剂来访问其他班级的私人成员。但是事实证明,如果我从另一个类中调用它,则不再需要这些获取器,并且可以直接访问它们。但这在该类之外是不可能的。

c++ class private
2个回答
2
投票
 Complex result = first + second;

这将为Complex类调用operator +,operator本身是Complex类的一部分,因此,即使对于作为参数传递的other实例,它也可以访问该类的所有成员。

std::cout << result.getReal() << " + " << result.getImaginary() << "i";

operator <result.real,因为它在此上下文中是私有的,即在Complex类之外。


2
投票

这不是另一堂课;它是另一个instance,并且A中的函数可以访问另一个privateA成员。这就是它的工作原理。否则,将不可能像您一样做事情,而我们需要能够做这些事情。

© www.soinside.com 2019 - 2024. All rights reserved.