📅  最后修改于: 2023-12-03 15:21:48.264000             🧑  作者: Mango
在面向对象编程中,类的成员可以分为公共、私有和受保护三种不同的访问修饰符,它们的统称为“访问控制”或“访问权限”。
公共成员可以被任何对象访问,不论是类的内部还是外部。一般来说,公共成员包括类的接口和对外提供的服务,例如公共函数、变量等。在类的外部,可以使用“.”操作符访问公共成员。
代码片段:
class Person {
public:
void setName(string name) { m_name = name; }
string getName() const { return m_name; }
private:
string m_name;
};
Person p;
p.setName("John");
cout << p.getName() << endl; // Output: John
上述代码中,setName()
和 getName()
是公共成员函数,在类的外部可以使用对象名调用它们的方法。
私有成员只能被类内部的成员访问,包括其它成员函数和友元函数。私有成员主要用于实现类的内部细节和成员之间的逻辑关系,通常不会对外部暴露。在类的外部,无法直接访问私有成员。
代码片段:
class Person {
public:
void setName(string name) { m_name = name; }
string getName() const { return m_name; }
private:
string m_name;
int m_age; // 私有成员
};
Person p;
p.m_age = 20; // 编译错误,无法访问私有成员
上述代码中,m_age
是一个私有成员变量,类的外部无法访问它。
受保护成员可以被子类访问,但不能被外部访问。受保护成员主要用于实现类的继承和多态性。在类的外部,无法直接访问受保护成员,但可以通过继承和派生来访问它。
代码片段:
class Person {
protected:
int m_age;
};
class Student : public Person {
public:
void setAge(int age) { m_age = age; } // 在子类中访问受保护成员
};
Student s;
s.setAge(18); // 在子类外部调用公共函数访问受保护成员
上述代码中,m_age
是一个受保护成员变量,在子类中可以访问它。
总结: