c++ 特殊方法可见性
Posted
技术标签:
【中文标题】c++ 特殊方法可见性【英文标题】:c++ special method visibility 【发布时间】:2012-02-18 04:37:16 【问题描述】:我有一个简单的对象,类型为“ObjectX”,带有一个名为“doSomething()”的简单方法。我想让 doSomething 只能由其他 ObjectX 访问。换句话说,如果某些东西要么是静态的,要么不是“ObjectX”类型的对象,它试图调用 doSomething,它将无法调用。但是,如果 ObjectX 类型的对象尝试调用该方法,它将能够。
这与私有方法不同,私有方法只能从它所在的同一个对象调用。如果有另一个相同类型的对象在不同的对象上调用该方法,它将被锁定.
【问题讨论】:
不,私有方法不限于从同一个对象调用。另一个相同类型的对象可以使用它,它不会被锁定。 @Seth 哦,真的吗?那我错了!你应该把它写成答案,我很乐意接受:) 【参考方案1】:private
几乎完全符合您的要求。只有相同类型的对象才能使用private
方法,其他对象可以在其他对象上调用这些函数(即private
函数不限于调用对象)。
唯一与您描述的不同的是,同一类中的static
函数也可以使用private
函数。没有语言功能可以让您将函数限制为仅限对象(不包括 static
函数)。
【讨论】:
当你说静态方法可以访问它的时候……这是否意味着所有静态方法都可以访问它,还是仅限于同一个类中的静态方法? @GeorgesOatesLarsen 静态函数在同一个类中。【参考方案2】:我不知道你从哪里得到你的事实。私有函数A::foo
可以被A
类型的任何对象调用。无论是在其自身上还是在另一个实例上。
class A
public:
void foo(const A& other) other.priv();
private:
void priv() const
;
int main()
A a1, a2;
a1.foo(a2);
return 0;
【讨论】:
【参考方案3】:在 C++ 中
Class A
A a;
doSomething()
a.doSomething();
上面的代码可以工作。这就是复制构造函数工作的原因。
Class B
A a;
doSomethingElse()
a.doSomething();
以上无论如何都行不通。
如果您还想提供对 B 的访问权限,并且通过在 A 类中指定 friend B;
来让 A 成为 B 的朋友。
【讨论】:
以上是关于c++ 特殊方法可见性的主要内容,如果未能解决你的问题,请参考以下文章