为什么输出*q就可以打印出被保护的对象成员?
protected的对象成员不是只能用成员函数调用?
protected的对象成员不是只能用成员函数调用?
2019-05-07
就算改成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;
}举报