zoukankan      html  css  js  c++  java
  • C++中的类与封装

    1,类的组合:

     

        1,类不是孤立存在的,类之间都会有一些关系,组合就是类的基本关系之一;

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

        3,学习电脑组装需要多少时间?学习电脑组装是否需要学习显示器、键盘、鼠标、主板、内存等部件的设计与制造?

           1,我们可以使用一个类,但是可能对类的内部状态一无所知;

     

    2,类的封装:

        1,类通常分为以下两个部分:

     

           1,类的实现细节;

               1,使用者往往可以忽略;

           2,类的使用方式;

        2,当使用类时,不需要关心其实现细节;

           1,普通用户使用手机:

               1,只需要学习如何发短信、打电话、拍照等;

           2,对类的使用者而言,简单且能够满足需求才可以,如果太复杂,则不会有人使用这个类;

           3,封装对于类的使用者而言是非常重要的概念,必须知道当我们创建类的 时候,一定要将复杂的实现细节全部封装在内部,不让使用者知道,对于使用者而言我们留给他们的就是一些非常简单的使用方式就可以了,这就是类的封装;

        3,当创建类时,才需要考虑其内部实现细节;

           1,手机开发工程师:

               1,需要考虑手机内部的实现细节;

              

    3,封装的由来:

        1,根据经验:并不是类的每个属性都是对外公开的;

           1,如:女孩儿不希望外人知道自己的体重和年龄;

           2,如:男孩儿不希望别人知道自己的身高和收入;

        2,而一些类的属性是对外公开的:

           1,如:人的姓名、学历、国籍等;

        3,必须在类的表示法中定义属性和行为的公开级别:

           1,类似文件系统中文件的权限;

           2,“公开级别”就是封装的体现;

          

    4,C++ 中类的封装:

        1,肯定要对类的行为和属性进行封装,所以定义的访问级别要作用于成员变量和成员函数;

           1,C++ 中已经可以对类成员进行访问级别的定义了;

        2,成员变量:C++ 中用于表示类属性的变量;

        3,成员函数:C++ 中用于表示类行为的函数;

        4,C++ 中可以给成员变量和成员函数定义访问级别:     

           1,public:

               1,成员变量和成员函数可以在类的内部和外界访问和调用;

           2,private:

               1,成员变量和成员函数只能在类的内部被访问和调用;

           3,这两个关键字体现了封装的概念;

              

    5,类成员的访问属性编程实验:

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

       

    6,类成员的作用域:

        1,类成员的作用域都只在类的内部,外部无法直接访问;

           1,所以类成员函数可以直接访问成员变量和成员函数;

           2,外部函数要通过对象(除了静态成员函数通过类访问)来访问类的成员;

           3,类的内部还是外部的判断依据是:是否定义在类的里面;

        2,成员函数可以直接访问成员变量和调用成员函数;

        3,类的外部都可以通过类变量访问 public 成员;

        4,类成员的作用域与访问级别没有关系:

           1,类的作用域仅是为了说明在类的内部是可以访问的,不管有没有访问级别;

           2,访问级别仅仅是为了外部函数访问类的成员而准备;

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

          

    7,类成员的作用域编程实验:

     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;  // 定义的第四个 i
    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 }

        1,对于类而言是有作用域的,类的作用域仅仅指的是类的成员变量和成员函数     的作用域,在整个类中;

        2,类外部访问类内部成员必须同过对象(或类)来访问;

        3,总而言之:

           1,类的内部:通过类的作用域访问,与访问级别无关;

           2,类的外部:通过类的对象(或类)访问,有访问级别的限制;

       

    8,小结:

        1,类通常可以分为使用方式和内部细节两部分;

        2,类的封装机制使得使用方式和内部细节相分离;

           1,通过封装给类成员定义访问级别,以 public 成员作为使用方式,以 protected 和 private 作为内部细节;

           2,只有这样,我们的程序设计才可能简单、产生的 bug 才可控;

        3,C++ 中通过定义类成员的访问级别实现封装机制;

        4,public 成员可以在类的内部和外界访问和调用;

        5,private 成员只能在类的内部被访问和调用;

  • 相关阅读:
    记一次博客被日的分析过程
    省钱版----查找 IoT 设备TTL线序__未完待续
    于bugku中游荡意外得到关于CBC翻转攻击思路
    清除浮动技巧总结
    程序猿的幸福
    Memcachedclientutils类
    leetcode 2 Add Two Numbers
    arduino小车入门教学——第三天(arduino基础)
    SAP MM模块 经常使用函数
    Java代码格式
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10904526.html
Copyright © 2011-2022 走看看