zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    .Net网站的web.config配置说明
    listview垂直滚动条效果
    .net 委托事件
    利用API实现窗体淡入淡出特效
    易经中的64个大智慧
    FlashWindowEx实现窗口在任务栏闪烁/变化颜色
    实现XML与DataTable互转 .NET
    C# .NET弹出窗口
    SVN使用教程
    在IE中使用VS.net WinForm控件
  • 原文地址:https://www.cnblogs.com/guanrongda-KaguraSakura/p/13338002.html
Copyright © 2011-2022 走看看