📜  C++ |继承|问题11(1)

📅  最后修改于: 2023-12-03 14:39:54.207000             🧑  作者: Mango

C++ | 继承 | 问题11

继承是 C++ 面向对象编程中的重要概念之一。它是一种从已有类中派生出新类的机制,新类继承了基类的成员变量和成员函数,并可以增加自己的成员变量和成员函数。本文将介绍 C++ 继承中的一个问题:派生类如何访问基类的 protected 成员。

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 成员

在派生类中,可以使用基类名加作用域解析运算符(::)来访问基类的 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 成员仍然不能被访问。