我正在修改一些以以下代码开头的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答案:


Structuring classes with multiple inheritance
Why do we need virtual functions in 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

10-06 12:46