C++黑马程序员——P99-105. 类和对象-封装


  • P99. 类和对象——封装——属性和行为作为整体
  • P101. 类和对象——封装——访问权限
  • P102. ...——...——C++中 class 和 struct 的区别
  • P103. ...——...——成员属性私有化
  • (P99)

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

  C++认为万事万物都皆为对象,对象有其属性和行为

  例如:

    人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌...

    车也可以作为对象,属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...

    具有相同性质的对象,我们可以抽象称为,人属于人类,车属于车类

  • 封装

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

  封装的意义

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

  封装意义一:

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

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

  一个示例

 1 //设计一个圆类,求圆的周长
 2 const double pi = 3.14;
 3 
 4 class circle
 5 {
 6     //访问权限
 7 public:
 8     //属性
 9     double radius;    //半径
10     //行为
11     //求圆的周长
12     double cal_ccf()
13     {
14         return 2 * pi*radius;
15     }
16 };
17 
18 int main()
19 {
20     //通过圆类 创建一个具体的圆(对象)
21     //实例化(通过 类 创建 对象 的过程)
22     circle c1;
23     c1.radius = 5;    //半径=5
24     cout << "圆c1的周长为 " << c1.cal_ccf() << endl;
25 
26     system("pause");
27     return 0;
28 }
  • (P101)

  封装意义二:

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

  访问权限有三种:

  1. public  公共权限  //成员 类内可访问,类外也可以访问

  2. protected  保护权限  //成员 类内可访问,类外不可访问(子类可以访问父类中的保护内容)

  3. private  私有权限  //成员 类内可访问,类外不可访问(子类可以访问父类中的私有内容)

  • (P102)struct 和 class 的区别

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

  区别:

  • struct 默认权限为公共
  • class 默认权限为私有
  • (P103)成员属性设置为私有

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

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

  一个示例

 1 class person
 2 {
 3 public:
 4     //写姓名
 5     void setname(string n)
 6     {
 7         name = n;
 8     }
 9     //读姓名
10     void getname()
11     {
12         cout << "姓名: " << name << endl;
13     }
14     //写年龄(并检测数据的有效性
15     void setage(int a)
16     {
17         if (a < 0 || a>150)
18         {
19             cout << "年龄设置错误!" << endl;
20             return;
21         }
22         age = a;
23     }
24     //读年龄
25     void getage()
26     {
27         cout << "年龄: " << age << endl;
28     }
29     //写情人
30     void setlover(string l)
31     {
32         lover = l;
33     }
34 private:
35     string name;    //姓名 可读可写
36     int age = 0;    //年龄 可读可写
37     string lover;    //情人 只写
38 };
39 
40 int main()
41 {
42     person p1;
43     p1.setname("wjj");
44     p1.getname();
45     p1.setage(160);
46     p1.setage(24);
47     p1.getage();
48     p1.setlover("aaa");
49     
50     system("pause");
51     return 0;
52 }

   运行结果