C++ 访问修饰符

C++ 等面向对象编程语言的主要特性之一是数据隐藏

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

然而,为了能够间接操作隐藏的数据,使某些成员函数和成员数据可访问也是很重要的。

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

例如,

class Patient {

    private:
        int patientNumber;
        string diagnosis;

    public:

      void billing() {
          // code
      }

      void makeAppointment() {
          // code
      }
}; 

 

在这里,Patient 类中的变量 patientNumberdiagnosis 使用 private 关键字隐藏起来,而成员函数则使用 public 关键字使其可访问。


C++ 访问修饰符的类型

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

  • public
  • private
  • protected

public 访问修饰符

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

示例 1:C++ public 访问修饰符

#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() 中,我们创建了 Sample 类的一个名为 obj1 的对象。然后,我们通过 obj1.ageobj1.displayAge() 这两行代码直接访问公共元素。

请注意,公共元素可以从 main() 访问。这是因为公共元素可以从程序的任何部分访问。


private 访问修饰符

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

示例 2:C++ private 访问说明符

#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,因为该函数使用传递给它的参数(即函数参数 int a)的值来初始化 age


protected 访问修饰符

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

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

示例 3:C++ protected 访问说明符

#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 派生的继承类。变量 ageSample 中被声明为 protected 关键字。

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

我们在 SampleChild 中为 age 赋值,尽管 age 在 Sample 类中声明,这一点有所体现。


总结:public、private 和 protected

  • public 元素可以被所有其他类和函数访问。
  • private 元素不能在声明它们的类之外访问,除了友元类和友元函数。
  • protected 元素与 private 元素类似,只是它们可以被派生类访问。
说明符 同一类 派生类 类外
public
private
protected

注意: 默认情况下,C++ 中的类成员是 private 的,除非另有说明。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战