zoukankan      html  css  js  c++  java
  • 第15课 类与封装的概念——狄泰软件学院

    类与封装的概念(上)

    类的组合

    电脑一般而言是由CPU、内存、主板、键盘和硬盘等部件组合而成。

     类通常分为以下两个部分

    —类的实现细节

    —类的使用方式

    使用类时不需要关心其实现细节
    创建类时才需要考虑其内部实现细节

    例:
    . 普通用户使用手机
      只需要学习如何发短信,打电话,拍照等等
    . 手机开发工程师
      需要考虑手机内部的实现细节

    封装的基本概念

    封装:字面意思就是将不想被人知道的东西隐藏起来,不对外公开。
    —根据经验:并不是类的每个属性都是对外公开的
      如:女孩子不希望外人知道自己的体重和年龄
      如:男孩子不希望别人知道自己的身高和收入

    而一些类的属性是对外公开的
      如:人的姓名,学历,国籍等

    必须在类的表示法中定义属性和行为的公开级别
      类似于文件系统中文件的权限

    C++中类的封装
    —成员变量:C++中用于表示类属性的变量
    —成员函数:C++中用于表示类行为的函数
    —C++中可以给成员变量和成员函数定义访问级别

    在程序中如何表示封装这个概念呢?
    private和public来表示

    .public
      成员变量和成员函数可以在类的内部和外界访问和调用
    .private
      成员变量和成员函数只能在类的内部被访问和调用

    类与封装的概念(中)

    编程实验:

     1 #include <stdio.h>
     2 
     3 #include <stdio.h>
     4 
     5 struct Biology 
     6 {
     7     bool living;
     8 };
     9 
    10 struct Animal : Biology 
    11 {
    12     bool movable;
    13     
    14     void findFood()
    15     { 
    16     }
    17 };
    18 
    19 struct Plant : Biology 
    20 {
    21     bool growable;
    22 };
    23 
    24 struct Beast : Animal 
    25 {
    26     void sleep() 
    27     { 
    28     }
    29 };
    30 
    31 struct Human : Animal 
    32 {
    33     void sleep() 
    34     { 
    35         printf("I'm sleeping...
    ");
    36     }
    37     
    38     void work() 
    39     { 
    40         printf("I'm working...
    ");
    41     }
    42 };
    43 
    44 struct Girl : Human
    45 {
    46 private:   //女生不希望外界知道其的年龄和体重
    47     int age;
    48     int weight;
    49 public:
    50     void print()
    51     {
    52         age = 22;
    53         weight = 48;
    54         
    55         printf("I'm a girl, I'm %d years old.
    ", age);
    56         printf("My weight is %d kg.
    ", weight);
    57     }
    58 };
    59 
    60 struct Boy : Human
    61 {
    62 private:
    63     int height;
    64     int salary;
    65 public:
    66     int age;
    67     int weight;
    68 
    69     void print()
    70     {
    71         height = 175;
    72         salary = 9000;
    73         
    74         printf("I'm a boy, my height is %d cm.
    ", height);
    75         printf("My salary is %d RMB.
    ", salary);
    76     }    
    77 };
    78 
    79 int main()
    80 {
    81     Girl g;
    82     Boy b;
    83     
    84     g.print();
    85     
    86     b.age = 19;
    87     b.weight = 120;
    88     //b.height = 180;
    89     
    90     b.print();
    91     
    92     return 0;
    93 }
    View Code

    从上面的程序可以看出:

    女生的私有变量为age和weight,这两个变量只能在类的内部使用,如果在类的外部使用,就会出错。为什么,因为这是我的隐私,不想让外界来看到我以及使用我。

    男生的私有变量为height和salary,这两个变量只能在类的内部使用,如果在类的外部使用,就会出错。为什么,因为这是我的隐私,不想让外界来看到我以及使用我。在这里如果类的外部访问age和weight,是完全ok的,因为它是public的。

    这就是封装的体现,这就是访问级别的体现。

    类与封装的概念(下)

    类成员作用域
    类成员的作用域都只在类的内部外部无法直接访问
    成员函数可以直接访问成员变量和调用成员函数
    类的外部可以通过类变量访问public成员
    类成员的作用域与访问级别没有关系
    注意:类的作用域仅仅是说明在定义的类里面是可以访问的,不管有没有访问级别它都是这样的,访问级别
    仅仅是去防止外面的函数访问内部的成员变量。

    C++中用struct定义的类中所有成员默认为public

     1 #include <stdio.h>
     2 
     3 int i = 1;
     4 
     5 struct Test
     6 {
     7 private:
     8     int i;
     9 
    10 public:
    11     int j;
    12         
    13     int getI()
    14     {
    15         i = 3;
    16         
    17         return i;
    18     }
    19 };
    20 
    21 int main()
    22 {
    23     int i = 2;
    24     
    25     Test test;
    26     
    27     test.j = 4;
    28     
    29     printf("i = %d
    ", i);              // i = 2;
    30     printf("::i = %d
    ", ::i);          // ::i = 1;
    31     // printf("test.i = %d
    ", test.i);    // 私有变量 Error
    32     printf("test.j = %d
    ", test.j);    // test.j = 4
    33     printf("test.getI() = %d
    ", test.getI());  // test.getI() = 3
    34     
    35     return 0;
    36 }
    View Code

    :: 表是要访问默认命名空间中变量i的值,默认的命名空间是什么?其实就是全局作用域,因此::i = 1。

    这个程序告诉我们,对于类而言,它是有作用域的,类的作用域仅仅指的是类的成员变量以及成员函数的作用域。
    如果要访问一个类的成员变量或成员函数,必须要通过一个类对象,有了类对象就可以去访问了,但是访问是否成功还需要看
    成员变量和成员函数的访问级别了。

    小结:
    类通常可以分为使用方式内部细节两部分
    类的封装机制使得使用方式内部细节相分离
    C++中通过定义类成员的访问级别实现封装机制
    public成员可以在类的内部和外界访问和调用
    private成员只能在类的内部被访问和调用

     

  • 相关阅读:
    html js 执行粘贴无效和 判断选中的内容(纯文本和html)是否为空
    Javascript中document.execCommand()的用法
    bootstrap4 按钮默认有个动画效果
    vue 源码初级学习
    gitextention 常用技巧
    状态模式全解析--JavaScript
    51..分治算法练习:  4378 【Laoguo】循环比赛
    51..分治算法练习:  4378 【Laoguo】循环比赛
    50.分治算法练习:  二分算法:  2703 奶牛代理商 XII
    50.分治算法练习:  二分算法:  2703 奶牛代理商 XII
  • 原文地址:https://www.cnblogs.com/-glb/p/11604865.html
Copyright © 2011-2022 走看看