码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-07-19 00:40:13      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:读写权限   out   ted   代码   示例   生活   私有   oid   private   

封装是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 }

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

标签:读写权限   out   ted   代码   示例   生活   私有   oid   private   

原文地址:https://www.cnblogs.com/guanrongda-KaguraSakura/p/13338002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!