2

在 Flex(和许多其他语言)中,可以将类的函数/方法声明为私有或受保护(或公共)。有什么不同?我的印象是它与子类的关系以及事物如何被继承或如何被调用有关,但我不确定究竟是什么。

4

1 回答 1

11

一般来说:

  • 私有成员只能由类本身访问。
  • 受保护的成员只能由类本身及其后代访问。
  • 公共成员可供所有人访问。

因此,随着您从私有到受保护再到公开,可见性会增加。

private在 C++ 中,您可以通过在基类名称前加上、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 回答