2

Flex (および他の多くの言語) では、クラスの関数/メソッドをプライベートまたは保護 (またはパブリック) として宣言できます。違いは何ですか?子クラスとの関係と、物事がどのように継承されるか、またはどのように呼び出されるかに関係があるという印象がありますが、正確にはわかりません。

4

1 に答える 1

11

一般に:

  • プライベート メンバーは、クラス自体からのみアクセスできます。
  • 保護されたメンバーには、クラス自体とその子孫のみがアクセスできます。
  • パブリック メンバーは、誰でもアクセスできます。

したがって、プライベートから保護、パブリックに移行するにつれて、可視性が向上します。

C++ では、基本クラス名の前にprivate,protectedまたはpublicキーワードを追加することで、メンバーの可視性を子孫に継承する方法を制御できます。これは、基本クラス メンバーの可視性を最大でそのレベルにすることを意味します。

class A {
private:
    int privA;
protected:
    int protA;
public:
    int pubA;

    // privA can be accessed inside class A
    // protA can be accessed inside class A
    // pubA  can be accessed inside class A
};
// pubA can be accessed by anyone

class B : public A {
    // No change to visibility of members
    // privA can't be accessed inside class B
    // protA can be accessed inside class B
    // pubA  can be accessed inside class B
};
// pubA can be accessed by anyone

class C : protected A {
    // Public members downgraded to protected
    // privA can't be accessed inside class C
    // protA can be accessed inside class C
    // pubA  can be accessed inside class C
};
// None of the members can be accessed outside class C

class D : private A {
    // Public and protected members downgraded to private
    // privA can't be accessed inside class D
    // protA can't be accessed inside class D
    // pubA  can't be accessed inside class D
};
// None of the members can be accessed outside class D

上記の各ケースでは、もちろん、子孫クラスは独自のプライベート、保護、およびパブリック メンバーを導入できます。

于 2008-10-09T03:25:17.130 に答える