gpt4 book ai didi

c++ - 可以从外部访问私有(private)运营商吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:02 29 4
gpt4 key购买 nike

即如果我在我的类中的私有(private)部分中定义运算符 == 和 +,它们可以从 main 访问吗?

它在 MSVS 2008 和 2010 中有效,但对我来说它似乎是编译器中的错误。是这样吗?

最佳答案

在私有(private)访问说明符下声明的函数或成员将无法在类成员函数之外访问。

在 C++ 中,类/结构/union 有 3 个访问说明符。这些访问说明符定义了如何访问类的成员。当然,类的任何成员都可以在该类中访问(在同一类的任何成员函数中)。继续访问访问说明符的类型,它们是:

Public - 声明为 Public 的成员可通过类的对象从类外部访问。
Protected - 声明为 Protected 的成员可以从类外部访问,但只能在从它派生的类中访问。
Private - 这些成员只能从类中访问。不允许外部访问。

friend 来救援!
在另一个类中将函数声明为 friend 允许该函数访问类中的所有成员函数,而不管访问说明符规则如何。 friend 这是一种绕过 C++ 中规定的访问说明符规则的方法。类似地,在另一个类中声明为友元的类将允许被声明为友元的类可以访问该类的所有成员。请注意,友元声明可以在任何访问说明符下给出,并且具有相同的效果。

源代码示例:

    class MyClass
{
public:
int a;
protected:
int b;
private:
int c;
friend void doSomething(MyClass obj);
};

void doSomething(MyClass obj)
{
obj.a = 10; //Allowed
obj.b = 20; //Allowed,
obj.c = 30; //Allowed,
}


int main()
{
MyClass obj;
obj.a = 10; //Allowed
obj.b = 20; //Not Allowed, gives compiler error
obj.c = 30; //Not Allowed, gives compiler error
}

所以在您的使用中,如果您使用 friend,那么您可以访问该类的私有(private)成员,否则您的编译器有问题,您应该考虑更改它!

关于c++ - 可以从外部访问私有(private)运营商吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6148940/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com