• 第15课 类与封装的概念


    1. 封装的基本概念

    (1)通常分为两个部分:类的实现细节类的使用方式

    • 当使用类时不需要关心其实现细节

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

            

    (2)根据经验,并不是每个属性都是对外公开的,但一些属性对外公开的

    (3)必须在类的表示法中定义属性和行为公开级别:类似文件系统中文件的限制

    2. C++中类的封装

    (1)成员变量:C++中用于表示类属性的变量

    (2)成员函数:C++中用于表示类行为的函数

    (3)C++中可以给成员变量成员函数定义访问级别(如publicprivate等) 

    • public

      • 成员变量和成员函数可以类的内部和外界访问和调用

    • private

      • 成员变量和成员函数只能类的内部被访问和调用

         

    【编程实验】类成员的访问属性  15-1.cpp

    #include <stdio.h>
    
     
    
    struct Biology
    
    {
    
        bool living;//生命
    
    };
    
     
    
    struct Animal : Biology
    
    {
    
        bool movable;//可移动
    
        void findFood(){};//找食物
    
    };
    
     
    
    struct Plant : Biology
    
    {
    
        bool growable;//可长大
    
    };
    
     
    
    struct Beast : Animal
    
    {
    
        void sleep(){};//睡觉
    
    };
    
     
    
    struct Human : Animal
    
    {
    
        void sleep(){};//睡觉
    
        void work(){}; //劳动
    
    };
    
     
    
     
    
    struct Girl : Human
    
    {
    
    private:
    
        int age;  //女孩的年龄:private
    
        int weight;//女孩的体重:private
    
     
    
    public:
    
        void print()
    
        {
    
            age = 22;
    
            weight = 48;
    
     
    
            printf("I'm a girl, I'm %d years old.
    ", age);
    
            printf("My weigth is %d kg.
    ", weight);
    
        };
    
    };
    
     
    
     
    
    struct Boy : Human
    
    {
    
    private:
    
        int height;  //身高:private
    
        int salary; //薪水:private
    
     
    
    public:
    
        int age;
    
        int weight;
    
     
    
        void print()
    
        {
    
            height = 175;
    
            salary = 9000;
    
     
    
            printf("I'm a boy, my height is %d cm.
    ", height);
    
            printf("My salary is %d RMB.
    ", salary);
    
        };
    
    };
    
     
    
    int main()
    {
    
     
    
        Girl g;
    
        Boy  b;
    
     
    
        g.print();
    
       
    
        b.age = 19;
    
        b.weight = 120;
    
        //b.height = 180;//Error: private
    
     
    
        b.print();
    
     
    
        return 0;
    
    }

    运行结果:

      

    3. 类成员的作用域

    (1)类成员作用域只在类的内部外部无法直接访问

    (2)成员函数可以直接访问成员变量调用成员函数

    (3)类的外部可以通过类变量访问public成员

    (4)类成员作用域访问级别没有关系。(注意C++中用struct定义的类中所有成员默认为public,而class定义的类成员的默认属性为private

    【编程实验】类成员的作用域  15-2.cpp

    #include <stdio.h>
    
     
    
    int i = 1;
    
     
    
    struct Test
    
    {
    
    private:
    
        int i;
    
     
    
    public:
    
        int j;
    
     
    
        int getI()
    
        {
    
            i = 3;
    
     
    
            return i;
    
        }
    
    };
    
     
    
    int main()
    
    {
    
        int i = 2;
    
     
    
        Test test;
    
     
    
        test.j = 4;
    
     
    
        printf("main: i = %d
    ", i); //i = 2;
    
        printf("::i = %d
    ",::i);  //::i = 1;
    
        //printf("test.i = %d
    ", test.i); //Error
    
        printf("test.j = %d
    ", test.j);   //test.j = 4
    
        printf("test.getI() = %d
    ", test.getI()); //test.getI() = 3
    
     
    
        return 0;
    
    }

    运行结果:

      

    4. 小结

    (1)通常可分为使用方式内部细节两部分

    (2)封装机制使得使用方式内部细节分离

    (3)C++中通过定义类成员(成员变量和成员函数)访问级别实现封装机制

    (4)public成员可在类的内部和外界访问和调用

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

  • 相关阅读:
    LeetCode111 二叉树的最小深度
    LeetCode104 二叉树的最大深度
    LeetCode102 二叉树的层次遍历
    LeetCode94 二叉树的中序遍历
    LeetCode145 二叉树的后序遍历
    LeetCode144 二叉树的前序遍历
    计算机考研真题 最大序列和
    计算机考研真题 对称矩阵
    计算机考研真题 点菜问题
    计算机考研真题 数字反转
  • 原文地址:https://www.cnblogs.com/hoiday/p/10090627.html
Copyright © 2020-2023  润新知