【发布时间】:2012-06-05 20:39:33
【问题描述】:
我有以下课程:-
class A {
public:
// some stuff that everyone should see
protected:
// some stuff that derived classes should see
private:
// some stuff that only I can see
void f();
void g();
};
现在,我希望 f() 只能从特定的类集(例如 B、C、D 类)访问,而 g() 可以从特定的其他类集(例如 D、E、 F)。有没有办法在 C++ 中指定这个?如果我让所有班级成为 A 的朋友,那么 f 和 g 都可以从 B、C、D、E、F(以及 A 的其他私有成员)访问,这不是我想要的。
这是可能的还是我应该改变我的对象模型?
【问题讨论】:
-
AFAIK 这在 C++ 中是不可能的。为什么不在接口中定义所需的方法,在类中实现接口,并用接口指针而不是类实例指针来提供其他类?
-
@Vlad 我想尽可能避免多重继承。
-
嗯,接口级别的多重继承是无害的
-
是吗?它仍然会创建一个虚拟表,并且调用除第一个基类的虚拟函数之外的任何东西都会因为 thunk 调整而稍微降低效率,对吧?在大多数情况下,这无关紧要,但我正在从事一个对性能要求很高的项目。
-
您认为为什么需要如此细粒度的控制?
标签: c++ oop private-members access-specifier