类成员的访问控制
三种访问控制修饰符:
- public // 公有成员
- protected // 保护成员
- private // 私有成员
- 对外提供的函数或者变量,定义为public,但不能随意改动。
- 可能会变动的函数或变量,定义为private,这样编译器会在使用时做检测。
- 只有结构体内部的函数才可以访问private的成员。
- public/private可以修饰函数也可以修饰变量。
private真的不能访问吗?
#include <iostream>
struct Test
{
private:
int x;
public:
int y;
void Init(int x, int y)
{
this->x = x;
this->y = y;
}
};
int main()
{
Test t;
t.Init(1, 2);
int *p = (int*)&t;
int n = *p;
int m = *(p + 1);
printf("%d %d\n", n, m);
return 0;
}
总结
private修饰的成员与普通的成员没有区别,只是编译器会做检测。
private修饰的成员只有自己的其他成员才能访问。
class与struct的区别
编译器默认class中的成员为private,而struct中的成员为public。
private中的成员是否被继承?
- 父类/基类中的私有成员是会被继承的。
- 只是编译器不允许直接进行访问。