C++ 访问修饰符
在本教程中,我们将借助示例了解 C++ 类的访问修饰符。C++ 的访问修饰符是 public
、private
和 protected
。
面向对象的编程语言(如 C++)的主要特征之一是数据隐藏。
数据隐藏是指限制对类的数据成员的访问。这是为了防止其他函数和类篡改类数据。
但是,让一些成员函数和成员数据可访问也很重要,以便可以间接操作隐藏的数据。
C++ 的访问修饰符允许我们确定哪些类成员可以被其他类和函数访问,哪些不能。
例如,
class Patient {
private:
int patientNumber;
string diagnosis;
public:
void billing() {
// code
}
void makeAppointment() {
// code
}
};
这里, Patient
类使用 private
关键字隐藏了变量 patientNumber
和 diagnosis
,而使用 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()
中,我们创建了一个名为 obj1
的 Sample
类的对象。 然后,我们使用代码 obj1.age
和 obj1.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
. Sample
用 protected
关键字声明变量 age
。
这意味着 SampleChild
可以访问年龄因为 Sample
是它的父类。
总结
public
所有其他类和函数都可以访问元素。private
元素不能在声明它们的类之外访问,除了friend
类和函数。protected
元素就像private
,但是它们可以被派生类访问。
访问修饰符 | 本类内 | 派生类 | 其他 |
---|---|---|---|
public |
可以访问 | 可以访问 | 可以访问 |
protected |
可以访问 | 可以访问 | 不能访问 |
private |
可以访问 | 不能访问 | 不能访问 |
注意: 默认情况下,C++ 中的类成员是 private
。