为何仅能在C++派生类的成员函数内访问基类protected成员?
问题原因解析
先看你的代码:
#include <iostream> using namespace std; class parent { protected: int main = 0; }; class subclass : public parent { cout << main; //error void function() //ok { cout << main; } };
报错的核心原因分两点:
- 类体的语法规则限制:类的定义体(
{}内部,成员函数之外的区域)只能用来声明/初始化成员变量、声明成员函数,不能直接放置可执行语句(比如cout << main;这种输出操作)。哪怕你访问的是public权限的成员,这么写也会触发语法错误,和protected权限无关。 - protected权限的访问规则:子类的成员函数内部确实有权限访问基类的protected成员,这是C++访问控制规则允许的,所以
function()里的代码可以正常编译。
简单说,你在类成员函数外写cout语句本身就违反了类的语法规范,这才是报错的直接原因,和protected的访问权限关系不大——哪怕把main改成public,那行代码照样报错。
内容的提问来源于stack exchange,提问作者Colors
相关产品推荐
相关产品推荐

