如何解释嵌套继承类结构?



我正在修改一些以以下代码开头的C++代码:

class AAAA {
public:
class BBBB : public CCCC {   // CCCC from include CCCC.h
friend class AAAA;
typedef ... ;
public:
BBBB() {}
BBBB(AAAA& thething, uint8_t a = 1) {
init(&thething, a);
}
virtual ~BBBB(){}
//...
}

然而,作为非专业的C++程序员,这是非常令人困惑和令人生畏的。

为什么子类会将其超类作为朋友类?

是什么意思:

(a)class BBBB : public CCCC,和
(b)BBBB() {}后跟
(c)virtual ~BBBB(){},在这种情况下?


我已经看过以下 SO 答案:

  • 构造具有多重继承的类
  • 为什么我们在C++中需要虚拟功能?

首先,我会单独查看BBBBCCCC

class BBBB : public CCCC {   // CCCC from include CCCC.h
friend class AAAA;
typedef ... ;
public:
BBBB() {}
BBBB(AAAA& thething, uint8_t a = 1) {
init(&thething, a);
}
virtual ~BBBB(){}
}

BBBB是一个非常标准的类,派生自CCCC。唯一不寻常的是friend class AAAA,它允许AAAA中的方法访问BBBB中的私有(和受保护)方法和字段。

BBBB嵌套在AAAA中的事实意味着要使用BBBB,您必须使用AAAA::BBBB b;访问它,并且BBBB可以访问AAAA中的私有(和受保护)方法和字段。

为什么子类会将其超类作为朋友类?
在这种情况下,(a)class BBBB : public CCCC
(b)BBBB() {}后跟
(c)virtual ~BBBB(){}是什么意思

AAAA不是BBBB超类,而是封闭类。见上文。

(a) 表示BBBB继承自CCCC。(b) 是默认构造函数。(c) 是析构函数,对于使用继承的类,建议将析构函数设为virtual

最新更新