我正在修改一些以以下代码开头的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++中需要虚拟功能?
首先,我会单独查看BBBB
和CCCC
。
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
。