主题
private、public、protected
在 C++ 中,类成员的访问权限由访问修饰符(private
、public
、protected
)来控制。通过合理使用这些修饰符,可以实现类的封装性,保护类的数据和功能免受外部错误访问。
public
public
是最常用的访问修饰符,它指定类成员对外部可见。使用 public
修饰的成员可以被任何代码访问,无论是类的外部还是内部。
示例:使用 public
cpp
#include <iostream>
using namespace std;
class Person {
public:
string name; // 公共成员
int age; // 公共成员
void introduce() { // 公共成员函数
cout << "Hello, my name is " << name << " and I am " << age << " years old." << endl;
}
};
int main() {
Person person;
person.name = "Alice";
person.age = 25;
person.introduce(); // 访问公共成员和成员函数
return 0;
}
输出:
Hello, my name is Alice and I am 25 years old.
在上面的代码中,name
、age
和 introduce()
都是 public
成员,可以在类外部直接访问。
private
private
修饰符用于限制类成员的访问权限。使用 private
修饰的成员只能在类的内部访问,外部代码无法直接访问它们。这是数据封装的核心,目的是保护对象的内部状态不被外部代码修改。
示例:使用 private
cpp
#include <iostream>
using namespace std;
class Person {
private:
string name; // 私有成员
int age; // 私有成员
public:
void setName(string n) { // 公共成员函数,设置私有成员
name = n;
}
void setAge(int a) { // 公共成员函数,设置私有成员
age = a;
}
void introduce() {
cout << "Hello, my name is " << name << " and I am " << age << " years old." << endl;
}
};
int main() {
Person person;
person.setName("Bob"); // 通过公共方法访问私有成员
person.setAge(30);
person.introduce();
return 0;
}
输出:
Hello, my name is Bob and I am 30 years old.
在这个例子中,name
和 age
是 private
成员,无法在类外部直接访问。外部代码必须通过公共成员函数(如 setName
和 setAge
)来访问这些私有成员。
protected
protected
修饰符介于 private
和 public
之间。使用 protected
修饰的成员可以在类的内部访问,并且可以被任何派生类访问,但无法通过类的外部代码访问。通常在继承中使用,允许子类访问父类的某些成员。
示例:使用 protected
cpp
#include <iostream>
using namespace std;
class Base {
protected:
string name; // 保护成员
};
class Derived : public Base {
public:
void setName(string n) {
name = n; // 子类可以访问基类的 protected 成员
}
void introduce() {
cout << "Hello, my name is " << name << "." << endl;
}
};
int main() {
Derived derived;
derived.setName("Charlie"); // 通过公共方法访问 protected 成员
derived.introduce();
return 0;
}
输出:
Hello, my name is Charlie.
在此例中,name
是基类 Base
的 protected
成员,只有 Base
和 Derived
类能访问它,外部无法直接访问。
总结
public
:类成员对外部可见,任何代码都可以访问。private
:类成员只能在类内部访问,外部无法访问。protected
:类成员可以在类内部和派生类中访问,但外部代码不能访问。
通过使用这些访问修饰符,C++ 提供了灵活的封装机制,帮助开发者控制类的数据访问权限,从而提高代码的安全性和可维护性。