c++之说_9_4|自定义类型 struct 访问修饰符

在本章最开始的时候 我说过:

我们编程基本要常常与自定义类型 打交道

进行面向对象编程方式

自定义类型  有个比较重要的概念:

访问权限修饰符

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  指针的使用方法

}

 

你可能感兴趣的:(C++,c++,开发语言)