头文件(.h):
bool canTravelWith(const Passenger&) const;
实施文件(.cpp):
bool Passenger::canTravelWith(const Passenger& x) const
{
bool canTravel = false;
//if both passengers have the same destination on the same date...
if (strcmp(x.m_destination,this->m_destination) == 0 && x.m_year == this->m_year && x.m_month == this->m_month && x.m_day == this->m_day)
{
canTravel = true;
}
return canTravel;
}
嘿伙计们,
上面的代码有效,但我想知道的是参数对象的成员是否是私人访问的;我怎样才能在我的canTravelWith()中调用该对象的成员?
在任何其他情况下;我无法打电话给对象的私人成员。
我想明白为什么会这样。
感谢。 (:
答案 0 :(得分:1)
private
和protected
的定义不会限制您从同一类中访问中的那些属性或函数。
这是一个Passenger
函数,因此它可以完全访问所有内容。游戏中有两个对象实例并不限制您。 private
并不意味着其他实例无法触及它,只能触及其他类。
答案 1 :(得分:0)
这是因为私有成员是类的私有成员,而不是实例。
这与询问为什么你可以访问this
的私有成员是一回事,因为this
是一个作为参数传递给你的函数的指针,但只是隐藏了。
为了正确看待,请考虑以下代码:
bool Passenger::canTravelWith(const Passenger& x) const
{
Passenger const* ptr = this;
// ptr is this, of course I can access private stuff!
(void) ptr->m_destination;
if (rand() % 10) {
ptr = &x;
}
// Is the compiler will really try to guess if ptr
// still points to this? privateness is a compile time
// property of the class, not runtime.
(void) ptr->m_destination;
}
此外,访问私有成员根本不需要实例:
struct Passenger {
private:
static constexpr int value() { return 42; }
public:
static constexpr int v = value();
};
正如您所看到的,我们正在创建一个静态变量,其值来自私有静态函数。但由于我们在类的范围,我们可以访问它。这是另一个例子:
struct Outer {
private:
int value = 42;
public:
struct Inner {
int getPrivate(Outer& o) { return o.value; }
};
};
int main() {
Outer o;
Outer::Inner i;
int v = i.getPrivate(o);
}
如您所见,Inner
访问Outer
的私人成员,而不是朋友。这只是因为Inner
在类的范围内。