• 【C++编程语言】之面向对象的三大特性之一封装



    C++面向对象的三大特性为:封装,继承,多态。

    1.封装

    ​ 封装的意义:

    ​ 1.将属性和行为作为一个整体,表现生活中的事物

    ​ 2.将属性和行为加以权限控制

    ​ 语法: class 类名 { 访问权限: 属性 / 行为};

    const double PI = 3.14;
    //class 代表设计一个类
    class Circle{
    	//访问权限
       	public//公共权限
        //属性
            int m_r;
        //行为
        //获取圆的周长
        double calcu(){
            return 2 * PI * m_r;
        }
    }
    int main(){
        //通过圆类创建一个具体的圆(对象)
        Circle c1;
        c1.m_r = 10;
        cout << "圆的周长:"<< c1.calcu() <<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    2.类的权限
    class Student{
    	//访问权限
       	public//公共权限
        //属性
            string name;//成员属性,成员变量
            int age;
        //命名权限
        void SetName(string Lname){//成员方法,成员函数
            name = Lname;
        }
    }
    int main(){
        //通过学生类创建一个具体的学生(对象)
        Student stu1;
        //通过函数更改学生姓名
        stu1.SetName("张三");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    //类在设计时,可以把属性和行为放在不同的权限下,加以控制
    访问权限有三种:
        1.public  公共权限
        2.protected	保护权限
        3.private 私有权限
     //公共权限  public  类内可以访问  类外也可以访问
     //保护权限  protected 类内可以访问 类外不可以访问 继承中子类可以访问父类的,对于私有的父类不能让子类继承 
     //私有权限  private  类内可以访问 类外不可以访问   
    class Person{
        public:
        		string name;
        protected: 
        		string car;
        private:
        		int Password;
        public:
        	void func(){//不管什么权限,在类内都可以访问
                name = "张三";
                car = "拖拉机";
                Password = 123456;
            }
    }
    int main(){
        Person p1;
        p1.name = "李四";
        p1.car = "奔驰";//错误 类外是不可访问protected权限
        p1.Password = 123;//错误 类外是不可以访问private权限
        p1.func();//可以通过类内的函数去调用类外不可访问的属性或函数
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    3.struct 和class的区别

    ​ struct 默认的权限是 公共 public

    ​ class 默认的权限是 私有 private

    4.成员属性设置为私有

    ​ 优点1:将所有成员属性设置为私有,可以自己控制读写权限

    ​ 优点2:对于写权限,我们可以检测数据的有效性

    class Person{
    private:
        string n_name;//可读可写
        int age;//只读
        string c_car;//只写
     public:
        void setName(string name){
            n_name = name;
        }
        string getName(){
            return  n_name; 
        }
        int getAge(){
            age = 0;//初始
            return age;
        }
        void setCar(string car){
            c_car = car;
        }
    }
    int main(){
        Person p1;
        p1.setName("张三");//写
        cout << p1.getName() <<endl;//读
        cout << p1.getAge() <<endl;//读
        p1.setCar("奔驰");//写
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    5.全局函数和成员函数
    //分别利用全局函数和成员函数判断正方形是否相等
    //只有正方形的长宽高相等就代表正方形相等
    class Cube{
    private:
        int m_L;//长
        int m_W;//宽
        int m_H;//高
    public: 
        //设置长
        void setL(int L){
            m_L = L;
        }
        //获取长
        int getL(){
            return m_L;
        }
        //设置宽
        void setW(int w){
            m_W = w;
        }
        //获取宽
        int getW(){
            return m_W;
        }
        //设置高
        void setH(int H){
            m_H = H;
        }
        //获取高
        int getH(){
            return m_H;
        }
        bool isSame(Cube &c){//采用引用的方式,节省内存空间
            if(m_L==c.getL() && m_W==c.getW() && m_H==c2.getH()){
            	return 1;
        	}else{
            	return 0;
        	}
        }
    }
    bool isSame(Cube &c1,Cube &c2){//采用引用的方式,节省内存空间
        if(c1.getL()==c2.getL() && c1.getW()==c2.getW() && c1.getH()==c2.getH()){
            return 1;
        }else{
            return 0;
        }
    }
    void main(){
        Cube c1;
        c1.setL(10);
        c1.setW(10);
        c1.setH(10);
        Cube c2;
        c2.setL(10);
        c2.setW(10);
        c2.setH(10);
        //调用全局函数判断
        if(isSame(c1,c2)){
            cout <<"正方形相同"<<endl;
        }else{
             cout <<"正方形不相同"<<endl;
        }
        //调用成员函数判断
        int rel = c1.isSame(c2);
        if(rel){
            cout <<"正方形相同"<<endl;
        }else{
             cout <<"正方形不相同"<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
  • 相关阅读:
    调用 sap.ui.base.ManagedObject 的构造函数时,如何传递绑定路径进去
    【语音之家】AI产业沙龙—语音技术在国音智能的应用
    Android USB电源管理
    复杂环境下多移动机器人路径规划研究附Matlab代码
    大厂外包干了一个月,技术明显进步。。。。。
    Ubuntu如何连接WiFi
    Kafka3.0.0版本——消费者(自动提交 offset)
    便携式电能质量分析仪
    电子电路设计基本概念100问(六)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】
    对于Java中的Loop或For-each,哪个更快
  • 原文地址:https://blog.csdn.net/kaszxc/article/details/126643811