我正在修改一些以以下代码开头的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(){},在这种情况下?
我已看过以下答案:
发布于 2019-07-25 12:19:52
首先,我会自己看看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。
https://stackoverflow.com/questions/57201693
复制相似问题