目录
有的时候会遇到这种尴尬的情况,父类有个成员变量 _num ,子类也有个成员变量叫 _num,实际在调用的时候,到底应该调用哪一个呢??
- class Person
- {
- public:
- int _num; // 身份证号
- };
-
- class Student : public Person
- {
- public:
- int _num; // 学号
- };
父类和子类有两个同名函数,但是子类在继承的时候,父类的同名函数会被隐藏,子类访问该同名函数的时候默认访问的是子类的同名函数,如果要访问父类的同名函数,需要加上作用域。
隐藏其实就是继承过程中的作用域问题。父类和子类都有着自己的作用域,即便是子类继承了父类的成员,父类成员在子类的空间里依然有着自己的作用域。
一般我们在访问xx同名成员的时候,因为父类同名成员会被隐藏,所以可以看作是遵循就近原则,默认访问的是子类的成员,这就有点像局部变量和全局变量的关系,在局部变量和全局变量同名的情况下,默认访问的是局部变量。
如果是子类的我们就直接访问,如果是父类的,我们可以显示声明作用域来访问。
我们可以通过监视窗口来证明,上述代码确实访问的是不同成员变量