【发布时间】:2015-07-11 05:37:13
【问题描述】:
我们可以在程序中声明但不是该类成员的函数中使用公共数据成员或成员函数吗?
【问题讨论】:
-
是的,您可以通过该类的对象
我们可以在程序中声明但不是该类成员的函数中使用公共数据成员或成员函数吗?
【问题讨论】:
任何函数都可以访问类的公共数据成员。
类的公共成员函数可以被任何函数调用。
这就是让班级成员public的目的。
当然,还有其他条件(例如,调用非静态公共成员函数的函数通常需要访问类的实例,即对象)。如果不满足这些条件,通常会阻止代码编译或导致未定义的行为——但这与成员是否为public 的问题无关。
【讨论】:
这可以通过使用友元函数的概念来实现。任何不是该类成员函数的函数,那么我们可以使用friend关键字将该函数声明为朋友函数。现在通过使用这个友元函数,我们可以在该类的对象的帮助下访问所有私有的、受保护的、公共的数据成员。
【讨论】:
如果有问题的非成员函数有一个可以调用成员函数的对象,那么是的——这就是公共成员的想法。例如:
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;
}
【讨论】: