如果某个类与另一个类有“has-a”关系,并且它派生同一个类会怎么样?
class A
{
friend classB;
// here lots of things might be , but i just try to understand how should I think.
};
class B : public A
{
// here again might be couple lines of codes.
protected:
A d;
};
这里到底发生了什么?我该怎么想呢?
答案 0 :(得分:1)
没有什么特别的。您的成员变量class A
名为d
,class B
也包含class A
包含的所有内容,以及其他任何内容。
我一眼就看不出真正有用的东西,但我确信在某种情况下它可能派上用场 - 指向A物体的指针会更有意义,因为它会使它成为现实链表(或类似的)。
答案 1 :(得分:0)
考虑:
struct Human {};
struct Superhuman : Human
{
Human mentor;
};
或者可能是一个稍微不那么直接的例子:
struct Human
{
virtual ~Human() {}
};
struct Girl : Human
{
unique_ptr<Human> ptrToGirlfriendOrBoyfriend;
};
struct Boy : Human
{
unique_ptr<Human> ptrToGirlfriendOrBoyfriend;
};
(必要时将unique_ptr
替换为shared_ptr
...)
所以有时候编写用于继承的相同类型确实是有道理的,尽管我认为它很少见。
虽然丢失了friend
声明,除非你真的,真的需要它。
答案 2 :(得分:0)
我不明白你为什么要在这里使用'朋友'。通过在A中声明B是朋友类,你说A信任B来访问其私人成员。但是,B派生自A,所以如果你想从B中访问A中的成员,但不允许任何其他访问,那么这些成员只需要“受保护”,而不是“私有”。