我有一组课程
class myClassA{
friend class MyFatherClass;
};
class MyFatherClass{
...
};
class MySonClass : public MyFatherClass {
};
我的父类可以访问MyClassA类的所有方法。 我还希望所有扩展MyFatherClass的类都可以调用这样的方法。
我只能看到两个选项:
你对这个问题有更优雅的解决方案吗?
由于
答案 0 :(得分:1)
首先......优雅是什么意思?你写的代码少了吗?我建议你在可读性方面不妥协。
使用友谊不应该是一个轻率的决定。 SO上有很多线程处理这个,但在这里我假设你已经知道这意味着什么。
选项1)更具可读性。当有人看到课程时,他们会直接知道谁有权访问它。代码应具有表现力,此选项完美地描述了意图。
选项2)有点矫枉过正。您正在编写一个包装器,以便您可以访问某些函数...为什么不让它们public
开始,因为包装器具有公共访问权限。它只是一个无添加的抽象层。
首先应该考虑功能(兼具功能),表现力和可读性(选项1在这里肯定更好)。
答案 1 :(得分:0)
对于应用程序知之甚少而做出判断有点困难,但如果MyFatherClass
及其后代只使用 这些函数,它们应该是{{1} } protected
的成员(可能static
)。
也许MyFatherClass
应该是MyClassA
的成员,没有自己的成员函数,只有MyFatherClass
来保存一些数据成员。
struct
只是一个建议......如果给出这么少的信息,很难说什么是最好的。一般的想法是语言不允许class MyFatherClass {
protected:
struct myStructA {
int state;
};
static void DoSomething( myStructA &a );
…
};
船舶继承,因为如果没有它,你总能做出好的设计。