AngelScript
Protected and private class members

Class members can be declared as protected or private to control where they can be accessed from. Protected members cannot be accessed from outside the class. Private members additionally cannot be accessed by derived classes.

This can be useful in large programs where you wish to avoid programmer errors where properties or methods are inappropriately used.

  // A class with private members
  class MyBase
  {
    // The following are public members
    void PublicFunc()
    {
      // The class can access its own protected and private members
      ProtectedProp = 0; // OK
      ProtectedFunc();   // OK
      PrivateProp = 0;   // OK
      PrivateFunc();     // OK
    }
    int PublicProp;
    // The following are protected members
    protected void ProtectedFunc() {}
    protected int ProtectedProp;
    // The following are private members
    private void PrivateFunc() {} 
    private int PrivateProp;
  }
  class MyDerived : MyBase
  {
    void Func()
    {
      // The derived class can access the protected members
      // of the base class but not the private members
      ProtectedProp = 1; // OK
      ProtectedFunc();   // OK
      PrivateProp = 1;   // Error
      PrivateFunc();     // Error  
    }
  }
  void GlobalFunc()
  {
    MyBase obj;
    // Public members can be accessed normally
    obj.PublicProp = 0;  // OK
    obj.PublicFunc();    // OK
    // Accessing protected and private members will give a compiler error
    obj.ProtectedProp = 0; // Error
    obj.ProtectedFunc();   // Error
    obj.PrivateProp = 0;   // Error
    obj.PrivateFunc();     // Error
  }