Головна »»» C++ Builder

Модифікатори доступу public private protected

Отже, public, private і protected - це модифікатори доступу, а не видимості, як помилково думають деякі. Private члени видно зовні класу, але вони не доступні.

  • Public - доступ відкритий усім, хто бачить визначення даного класу.
  • Private - доступ відкритий самому класу (тобто функцій-членів даного класу) і друзям (friend) даного класу, як функціями, так і класами.
  • Protected - доступ відкритий класам, похідним від даного.

 

class A
{
 friend void Update(A&);
 public:
 
 int x;
 
 private:
 int y;
 
 protected:
 int z;
};
void Update(A & obj)
{
 obj.x = 100; /** добре */
 obj.y = 200; /** добре */
 obj.z = 300; /** добре */
}
 
void NotFriendUpdate(A & obj)
{
 obj.x = 100; /** добре */
 //obj.y = 200; /** помилка немає доступу */
 //obj.z = 300; /** помилка немає доступу */
}
class B : public A
{
 void change()
 {
 x = 100; /** добре */
 //y = 200; /** помилка немає доступу */
 z = 300; /** добре */
 }
};
 
class C : private A
{
 void change()
 {
 x = 100; /** добре */
 //y = 200; /** помилка немає доступу */
 z = 300; /** добре */
 }
};
 
class D : protected A
{
 void change()
 {
 x = 100; /** добре */
 //y = 200; /** помилка немає доступу */
 z = 300; /** добре */
 }
};

У C ++ існує public-успадкування, private-успадкування і protected-успадкування. Залежно від того, який тип використовується, змінюється доступ до членів базового класу для клієнтів похідного. У таблиці зведена інформація про цю зміну.

  початковий модифікатор доступу
  public private protected
public-наслідування public private protected
private-наслідування private private private
protected-наслідування protected private protected

Слід додати, що похідний клас може змінити модифікатор доступу з protected на public, розмістивши using оголошення у відповідній секції класу:

class E : public A
{
 public:
 using A::z;
};
 
void UpdateE(E & obj)
{
 obj.z = 300; /** добре */
}
 

 

 
26.04.2013
2850 переглядів