📅  最后修改于: 2023-12-03 14:39:54.207000             🧑  作者: Mango
继承是 C++ 面向对象编程中的重要概念之一。它是一种从已有类中派生出新类的机制,新类继承了基类的成员变量和成员函数,并可以增加自己的成员变量和成员函数。本文将介绍 C++ 继承中的一个问题:派生类如何访问基类的 protected 成员。
在 C++ 中,protected 成员是一种访问限制符。这种成员既可以被基类的成员函数和派生类的成员函数访问,但不能被对象或者其它函数访问。
class A {
protected:
int protectedVar;
};
class B : public A {
public:
void accessProtectedVar() {
protectedVar = 1; // 正确,可以在派生类中访问基类的 protected 成员
}
};
int main() {
A a;
a.protectedVar = 1; // 错误,不能在对象或其它函数中访问 protected 成员
return 0;
}
在上面的代码中,类 A 中的 protected 成员 protectedVar 可以被类 B 中的成员函数 accessProtectedVar 访问,但不能在 main 函数中被直接访问。
在派生类中,可以使用基类名加作用域解析运算符(::)来访问基类的 protected 成员。
class A {
protected:
int protectedVar;
};
class B : public A {
public:
void accessProtectedVar() {
protectedVar = 1; // 在派生类中,可以直接访问基类的 protected 成员
A::protectedVar = 2; // 也可以使用基类名加作用域解析运算符来访问
}
};
在上面的代码中,类 B 中的成员函数 accessProtectedVar 可以直接访问基类 A 的 protected 成员 protectedVar,也可以使用基类名加作用域解析运算符来访问。
在 C++ 中,派生类可以访问基类的 protected 成员。可以直接访问,也可以使用基类名加作用域解析运算符来访问。但在对象或其它函数中,protected 成员仍然不能被访问。