为了账号安全,请及时绑定邮箱和手机立即绑定

为什么输出*q就可以打印出被保护的对象成员?

protected的对象成员不是只能用成员函数调用?

正在回答

2 回答

就算改成private都可以,这个老师用的指针p不是Circle类的指针,而是int指针,所以不受访问限定符的限定。

你可以用下面的代码来看,p1是Circle类的指针,p2是int指针。

class Circle : public Shape{

public:
    Circle(int radius);
    ~Circle();

private:
    int m_iR;
};

int main() {
    Circle circle(200);
    cout << "sizeof(circle) = " << sizeof(circle) << endl;

    // Circle指针,无法访问
    Circle *p1 = &circle;
    p1->m_iR;

    // int指针,不受private限定符限制
    int *p2 = (int *)&circle;

    cout << "p2 = " << p2 << endl;
    cout << "(unsigned int)(*q) = " << (unsigned int)(*p2) << endl;
}


0 回复 有任何疑惑可以回复我~

protected保护的对象成员子类可以调用,友元函数或者友元类也可以使用

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66234    人
  • 解答问题       314    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

为什么输出*q就可以打印出被保护的对象成员?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信