• C++面向对象基础--类的封装


    封装是C++面向对象三大特性之一

    1.封装的意义

    封装的意义:

    (1)将属性和行为作为一个整体,表现生活中的事物
    (2)将属性和行为加以权限控制

    封装意义一:

    ​在设计类的时候,属性和行为写在一起,表现事物

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

    示例1:设计一个圆类,求圆的周长

    示例代码:

     1 #include<iostream>
     2 using namespace std;
     3 //圆周率
     4 const double PI = 3.14;
     5 
     6 //1、封装的意义
     7 //将属性和行为作为一个整体,用来表现生活中的事物
     8 
     9 //封装一个圆类,求圆的周长
    10 //class代表设计一个类,后面跟着的是类名
    11 class Circle
    12 {
    13 public:  //访问权限  公共的权限
    14 
    15     //属性
    16     int m_r;//半径
    17 
    18     //行为
    19     //获取到圆的周长
    20     double calculateZC()
    21     {
    22         //2 * pi  * r
    23         //获取圆的周长
    24         return  2 * PI * m_r;
    25     }
    26 };
    27 
    28 int main() 
    29 {
    30 //通过圆类,创建圆的对象 31 // c1就是一个具体的圆 32 Circle c1; 33 c1.m_r = 10; //给圆对象的半径 进行赋值操作 34 35 //2 * pi * 10 = = 62.8 36 cout << "圆的周长为: " << c1.calculateZC() << endl; 37 38 system("pause"); 39 40 return 0; 41 }

    示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

    示例代码:

     1 #include<iostream>
     2 using namespace std;
     3 //学生类
     4 class Student
     5 {
     6 public:
     7     void setName(string name) 
     8     {
     9         m_name = name;
    10     }
    11     void setID(int id) 
    12     {
    13         m_id = id;
    14     }
    15 
    16     void showStudent()
    17     {
    18         cout << "name:" << m_name << " ID:" << m_id << endl;
    19     }
    20 public:
    21     string m_name;
    22     int m_id;
    23 };
    24 
    25 int main()
    26 {
    27 
    28     Student stu;
    29     stu.setName("KaguraSakura");
    30     stu.setID(2119);
    31     stu.showStudent();
    32 
    33     system("pause");
    34 
    35     return 0;
    36 }

    封装意义二:

    类在设计时,可以把属性和行为放在不同的权限下,加以控制

    访问权限有三种:

    (1). public 公共权限
    (2). protected 保护权限
    (3). private 私有权限

    示例代码:

     1 #include<iostream>
     2 using namespace std;
     3 //三种权限
     4 //公共权限  public     类内可以访问  类外可以访问
     5 //保护权限  protected  类内可以访问  类外不可以访问
     6 //私有权限  private    类内可以访问  类外不可以访问
     7 
     8 class Person
     9 {
    10     //姓名  公共权限
    11 public:
    12     string m_Name;
    13 
    14     //汽车  保护权限
    15 protected:
    16     string m_Car;
    17 
    18     //银行卡密码  私有权限
    19 private:
    20     int m_Password;
    21 
    22 public:
    23     void func()
    24     {
    25         m_Name = "张三";
    26         m_Car = "拖拉机";
    27         m_Password = 123456;
    28     }
    29 };
    30 
    31 int main() 
    32 {
    33 Person p; 34 p.m_Name = "李四"; 35 //p.m_Car = "奔驰"; //保护权限类外访问不到 36 //p.m_Password = 123; //私有权限类外访问不到 37 38 system("pause"); 39 40 return 0; 41 }

    2.struct和class区别

    在C++中 struct和class唯一的区别就在于默认的访问权限不同

    区别:

    struct 默认权限为公共
    class 默认权限为私有

    示例代码:

     1 #include<iostream>
     2 using namespace std;
     3 class C1
     4 {
     5     int  m_A; //默认是私有权限
     6 };
     7 
     8 struct C2
     9 {
    10     int m_A;  //默认是公共权限
    11 };
    12 
    13 int main()
    14 {
    15     C1 c1;
    16     c1.m_A = 10; //错误,访问权限是私有
    17 
    18     C2 c2;
    19     c2.m_A = 10; //正确,访问权限是公共
    20 
    21     system("pause");
    22 
    23     return 0;
    24 }

    3.成员属性设置为私有

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

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

    示例代码:

     1 #include<iostream>
     2 using namespace std;
     3 class Person 
     4 {
     5 public:
     6 
     7     //姓名设置可读可写
     8     void setName(string name)
     9     {
    10         m_Name = name;
    11     }
    12     string getName()
    13     {
    14         return m_Name;
    15     }
    16 
    17 
    18     //获取年龄 
    19     int getAge() 
    20     {
    21         return m_Age;
    22     }
    23     //设置年龄
    24     void setAge(int age)
    25     {
    26         if (age < 0 || age > 150)
    27         {
    28             cout << "你个老妖精!" << endl;
    29             return;
    30         }
    31         m_Age = age;
    32     }
    33 
    34     //情人设置为只写
    35     void setLover(string lover)
    36     {
    37         m_Lover = lover;
    38     }
    39 
    40 private:
    41     string m_Name; //可读可写  姓名
    42     
    43     int m_Age; //只读  年龄
    44 
    45     string m_Lover; //只写  情人
    46 };
    47 
    48 
    49 int main()
    50 {
    51 
    52     Person p;
    53     //姓名设置
    54     p.setName("张三");
    55     cout << "姓名: " << p.getName() << endl;
    56 
    57     //年龄设置
    58     p.setAge(50);
    59     cout << "年龄: " << p.getAge() << endl;
    60 
    61     //情人设置
    62     p.setLover("小樱");
    63     //cout << "情人: " << p.m_Lover << endl;  //只写属性,不可以读取
    64 
    65     system("pause");
    66 
    67     return 0;
    68 }
  • 相关阅读:
    docker 部署aps.net MVC到windows容器
    docker 搭建私有仓库 harbor
    解决关于:Oracle数据库 插入数据中文乱码 显示问号???
    ionic cordova build android error: commamd failed with exit code eacces
    cordova build android Command failed with exit code EACCES
    Xcode 10 iOS12 "A valid provisioning profile for this executable was not found
    使用remix发布部署 发币 智能合约
    区块链: 编译发布智能合约
    mac 下常用命令备忘录
    JQuery fullCalendar 时间差 排序获取距当前最近的时间。
  • 原文地址:https://www.cnblogs.com/guanrongda-KaguraSakura/p/13338002.html
Copyright © 2020-2023  润新知