类的公共成员及其访问

Posted

技术标签:

【中文标题】类的公共成员及其访问【英文标题】:Public member of class and its access 【发布时间】:2015-07-11 05:37:13 【问题描述】:

我们可以在程序中声明但不是该类成员的函数中使用公共数据成员或成员函数吗?

【问题讨论】:

是的,您可以通过该类的对象 【参考方案1】:

任何函数都可以访问类的公共数据成员。

类的公共成员函数可以被任何函数调用。

这就是让班级成员public的目的。

当然,还有其他条件(例如,调用非静态公共成员函数的函数通常需要访问类的实例,即对象)。如果不满足这些条件,通常会阻止代码编译或导致未定义的行为——但这与成员是否为public 的问题无关。

【讨论】:

【参考方案2】:

这可以通过使用友元函数的概念来实现。任何不是该类成员函数的函数,那么我们可以使用friend关键字将该函数声明为朋友函数。现在通过使用这个友元函数,我们可以在该类的对象的帮助下访问所有私有的、受保护的、公共的数据成员。

【讨论】:

【参考方案3】:

如果有问题的非成员函数有一个可以调用成员函数的对象,那么是的——这就是公共成员的想法。例如:

class X

  public:
    void f()  
    int n_;
;

int main()

    X x; // an actual object/variable of type X
    x.f(); // can access public members
    x.n_ = 3;

【讨论】:

c++中有一条规则是"Never specify public or protected member data in a class." @goGud:这不是“C++ 中的规则”,只是某人过于严格的风格指南。 @goGud:这是人们阅读的合理指南,尽管将其称为“规则”会使它听起来像是标准规定的……这当然取决于程序员。干杯。

以上是关于类的公共成员及其访问的主要内容,如果未能解决你的问题,请参考以下文章

访问基类的公共成员失败

让公共成员变量访问 C++ 中同一类的私有成员

子类是不是也继承了 C++ 中的私有数据成员?但是是通过超类的公共方法访问的吗?

我相信这是 clang++ 中与访问类的公共成员函数有关的错误

如何从他们自己的类的成员函数中访问公共变量? (C ++)

C ++ QT如何从QMainWindow布局访问QWidget的公共类成员