在C++中,private
和 protected
都是访问控制修饰符,用于限制类中成员变量和成员函数的访问权限。它们之间的区别在于:
-
private
成员只能被同一个类中的成员函数访问,外部代码无法直接访问。这意味着private
成员对于类的使用者是不可见的。 -
protected
成员可以被同一个类中的成员函数访问,也可以被派生类的成员函数访问。外部代码仍然无法直接访问protected
成员,但派生类可以访问它们。
在继承关系中,private
成员不会被继承,而 protected
成员会被继承到派生类中。这意味着派生类可以访问基类中的 protected
成员,但不能访问 private
成员。
class Base {
private:
int privateVar;
protected:
int protectedVar;
};
class Derived : public Base {
public:
void accessBaseMembers() {
// privateVar is not accessible here
// protectedVar is accessible here
protectedVar = 10;
}
};
int main() {
Base b;
// b.privateVar = 5; // Error: privateVar is private
// b.protectedVar = 5; // Error: protectedVar is protected
Derived d;
// d.privateVar = 5; // Error: privateVar is private
// d.protectedVar = 5; // Error: protectedVar is protected
d.accessBaseMembers(); // This is allowed
}
在上面的示例中,privateVar
是私有成员,无法在 Base
和 Derived
类的外部直接访问。protectedVar
是受保护成员,可以在 Base
和 Derived
类的成员函数中访问,也可以在 Derived
类的派生类中访问。