在本章最开始的时候 我说过:
我们编程基本要常常与自定义类型 打交道
进行面向对象编程方式
自定义类型 有个比较重要的概念:
访问权限修饰符
private (私有)
protected (血亲私有)
public (公开)
private 私有 很好理解
只能在自己的内部访问到
protected (血亲私有)
应该叫继承链私有 只有子父类的内部有权限访问
public (公开)
公开不必说 在任何地方通过实例化的对象都可访问
什么意思呢?
什么叫类内部 和 继承链内部 类外部?
类内部 其实 就是 类定义时的内部 (.H .CPP 文件)
且可以理解为 struct 定义时 后面跟着的 { } 之中就叫类内部
继承链类内部也是如此
而类外部 struct 定义时 后面跟着的 { } 之外就叫类外部
如 全局位置 main 函数中 全局函数中
如
struct A
{
public:
//在此处写的 东西 都是公开的 变量 函数
int a;
int& geta(){ return a; } //返回 a变量的引用
int* getaPr(){ return &aPr; }
int* getaPre(){ return &aPre; }
protected:
//在此处写的 东西 都是继承链私有的 变量 函数
int aPr;
private:
//在此处写的 东西 都是本身私有的 变量 函数
int aPre;
}
struct B: public A // 继承写法 继承 其实就是 子类直接拥有了A 中的一切 函数 变量 typedef 的类型别名 using 的类型别名
{
public:
void InitA()
{
a = 100;//ok public 修饰的 任何位置都可访问
aPr = 101;//ok protected 修饰的 子类内部可以访问
aPre = 102;//error 在父类 A 中 该 aPre 变量是 private 的 所以子类内部无权访问 只能在A自己的内部访问 同样我们也可以间接
int * initaPre = getaPre();
*initaPre = 102;
}
}
int main()
{
//在此位置写的都叫 类外部 它在main 函数内部
A aIns;
aIns . a = 100;//ok a变量是public 的 外部自然可以通过实例对象访问
aIns . aPr = 100;//error aPr变量是protected 的 类的外部不可以通过实例对象访问
aIns . aPre = 100;//error aPre变量是private 的 类的外部不可以通过实例对象访问
虽然外部没法 直接 访问 aPr aPre 但是可以通过间接访问到 我们用public 修饰的 三个成员函数
int * p = aIns . getaPre();//ok aIns.aPre的地址
*p = 100; //aIns.aPre = 100 指针的使用方法
p = aIns . getaPr();//ok aIns.aPr的地址
*p = 100; //aIns.aPr = 100 指针的使用方法
}