基类和派生类有同名成员的情况
//base
class base{
int j;
public:
int i;
void func();
};
//派生类
class derived:public base{
public:
int i;
void access();
void func();
};
void derived::access(){
j = 5;//error
i = 5;//引用的是派生类的 i
base::i = 5;//引用的是基类的 i
func();//派生类的
base::func();//基类的
}
derived obj;
obj.i = 1;
obj.base::i = 1;
对象占用的存储空间.png
Note:一般来说,基类和派生类不定义同名成员变量。
访问范围说明符
- 基类的 private 成员:
- 基类的成员函数
- 基类的友员函数
- 基类的 public 成员:
- 基类的成员函数
- 基类的友员函数
- 派生类的成员函数
- 派生类的友员函数
- 其他的函数
- 基类的 protected 成员:
- 基类的成员函数
- 基类的友员函数
- 派生类的成员或者友元只能通过派生类的对象来访问基类的 protected 成员,而不能通过基类直接访问。
网友评论