C++ 访问修饰符

在本教程中,我们将借助示例了解 C++ 类的访问修饰符。C++ 的访问修饰符是 publicprivateprotected

面向对象的编程语言(如 C++)的主要特征之一是数据隐藏

数据隐藏是指限制对类的数据成员的访问。这是为了防止其他函数和类篡改类数据。

但是,让一些成员函数和成员数据可访问也很重要,以便可以间接操作隐藏的数据。

C++ 的访问修饰符允许我们确定哪些类成员可以被其他类和函数访问,哪些不能。

例如,

class Patient {

    private:
        int patientNumber;
        string diagnosis;

    public:

      void billing() {
          // code
      }

      void makeAppointment() {
          // code
      }
};

这里, Patient 类使用 private 关键字隐藏了变量 patientNumberdiagnosis,而使用 public 关键字公开了成员函数。

C++ 访问修饰符的类型

在 C++ 中,有 3 个访问修饰符:

  • public
  • private
  • protected

公共访问修饰符

  • public 关键字用于创建公共成员(数据和函数)。
  • 可以从程序的任何部分访问公共成员。

示例 1:C++ 公共访问修饰符

#include <iostream>
using namespace std;

// define a class
class Sample {

    // public elements
   public:
    int age;

    void displayAge() {
        cout << "Age = " << age << endl;
    }
};

int main() {

    // declare a class object
    Sample obj1;

    cout << "Enter your age: ";

    // store input in age of the obj1 object
    cin >> obj1.age;

    // call class function
    obj1.displayAge();

    return 0;
}

输出

Enter your age: 20
Age = 20

在这个程序中,我们创建了一个名为 Sample 的类,其中包含一个 public 变量 age 和一个 public 函数 displayAge()

main() 中,我们创建了一个名为 obj1Sample 类的对象。 然后,我们使用代码 obj1.ageobj1.displayAge() 直接访问 public 元素。

请注意,这些 public 元素可以从 main() 方法中访问. 这是因为您可以从程序的所有部分访问 public 元素。

私有访问修饰符

  • private 关键字用于创建私有成员(数据和函数)。
  • 私有成员只能从类内部访问。
  • 友元类和友元函数可以访问私有成员。

示例 2:C++ 私有访问说明符

#include <iostream>
using namespace std;

// define a class
class Sample {

    // private elements
   private:
    int age;

    // public elements
   public:
    void displayAge(int a) {
        age = a;
        cout << "Age = " << age << endl;
    }
};

int main() {

    int ageInput;

    // declare an object
    Sample obj1;

    cout << "Enter your age: ";
    cin >> ageInput;

    // call function and pass ageInput as argument
    obj1.displayAge(ageInput);

    return 0;
}

输出

Enter your age: 20
Age = 20

main() 中, obj1 不能直接访问类的 age 变量.

// error
cin >> obj1.age;

我们只能通过公共函数 displayAge() 间接操纵 age

受保护的访问修饰符

在我们了解 protected 访问说明符之前,请确保您了解C++ 中的继承

  • protected 关键字用于创建受保护的成员(数据和函数)。
  • 受保护的成员可以在类内和派生类中访问。

示例 3:受 C++ 保护的访问说明符

#include <iostream>
using namespace std;

// declare parent class
class Sample {
    // protected elements
   protected:
    int age;
};

// declare child class
class SampleChild : public Sample {

   public:
    void displayAge(int a) {
        age = a;
        cout << "Age = " << age << endl;
    }

};

int main() {
    int ageInput;

    // declare object of child class
    SampleChild child;

    cout << "Enter your age: ";
    cin >> ageInput;

    // call child class function
    // pass ageInput as argument
    child.displayAge(ageInput);

    return 0;
}

输出

Enter your age: 20
Age = 20

这里, SampleChild 是一个继承的类,它派生自 Sample . Sampleprotected 关键字声明变量 age

这意味着 SampleChild 可以访问年龄因为 Sample 是它的父类。

总结

  • public 所有其他类和函数都可以访问元素。
  • private 元素不能在声明它们的类之外访问,除了 friend 类和函数。
  • protected 元素就像 private,但是它们可以被派生类访问。
访问修饰符 本类内 派生类 其他
public 可以访问 可以访问 可以访问
protected 可以访问 可以访问 不能访问
private 可以访问 不能访问 不能访问

注意: 默认情况下,C++ 中的类成员是 private