服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 带你从头学习C++的封装

带你从头学习C++的封装

2022-09-14 16:03超级小何 C/C++

这篇文章主要为大家从头学习了C++的封装,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

封装

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

封装的意义:

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

 封装意义一:

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

语法:

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

属性和行为作为整体

?
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
#include<iostream>
using namespace std;
//圆周率
const double PI = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径
class Circle {
    //访问权限
    //公共权限
public:
        //属性
        //半径
        int m_r;
    //行为
    //获取圆的周长
        double calculateZC() {
            return 2 * PI * m_r;
        }
};
 int main() {
    //通过圆类,创建具体的圆(对象)
    //实例化  (通过一个类 创建一个对象的过程)
    Circle c1;
    //给圆对象的属性进行赋值
    c1.m_r = 10;
    //2 * PI * m_r = 62.8;
    cout << "圆的周长为:" << c1.calculateZC () << endl;
    system("pause");
    return 0;
}

 实例—设计学生类

?
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
#include<iostream>
using namespace std;
//#include<string>
//设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
//设计学生类
class Student {
public://公共权限
    //类中的属性和行为 我们统一称为 成员
    //属性 成员属性 成员变量
    //行为 成员函数 成员方法
    //属性
    string m_Name;//姓名
    int m_Id;//学号
    //行为
    //显示姓名和学号
    void showStudent() {
        cout << "姓名:" << m_Name << "  学号:"<<m_Id << endl;
    }
    //给姓名赋值
    void setName(string name) {
        m_Name = name;
    }
    void setId(int Id) {
        m_Id = Id;
    }
};
int main() {
    //创建一个具体的学生  实例化对象
    Student s1;
    //给s1对象进行属性赋值操作
    //s1.m_Name = "张三";
    s1.setName("张三");
    //s1.m_Id = 1;
    s1.setId(1);
    s1.showStudent();
    Student s2;
    s2.m_Name = "李四";
    s2.m_Id = 2;
    s2.showStudent();
    system("pause");
    return 0;
}

访问权限

封装意义二:

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

权限访问有三类:

  • public         公共权限
  • protected    保护权限
  • private        私有权限
?
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
#include<iostream>
using namespace std;
//访问权限
//三种
//公共权限 public        成员  类内可以访问  类外也能访问
//保护权限 protected     成员  类内可以访问  类外不可以访问 儿子可以访问到父亲中的保护内容
//私有权限 private       成员  类内可以访问  类外不可以访问 儿子不可以访问到父亲的私有内容
class Person {
public:
    //公共权限
    string m_Name;//姓名
protected:
    //保护权限
    string m_Car;//汽车
private:
    int m_Password;//银行卡密码
public:
    void func() {
        m_Name = "张三";
        m_Car = "拖拉机";
        m_Password = 123456;
    }
};
int main() {
    //实例化具体对象
    Person p1;
    p1.m_Name = "李四";
    //p1.m_Car = "奔驰";//保护权限的内容,在类外访问不到
    //p1.m_Password = 123;//私有权限的内容,在类外访问不到
    system("pause");
    return 0;
}

class与struct区别

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

区别:

  • struct默认权限为公共
  • class默认权限为私有
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
class C1 {
    int m_A;//默认权限 是私有
};
struct C2 {
    int m_A;//默认权限 是公共
};
int main() {
    //struct和class区别
    //struct 默认权限是 公有 public
    //class  默认权限是 私有 private
    C1 c1;
    //c1.m_A = 100;//在class里默认权限 私有,因此类外不可以访问
    C2 c2;
    c2.m_A = 100;//在struct默认的权限为公共,因此可以访问
    system("pause");
    return 0;
}

成员属性私有化

  • 优点1:将所有成员属性设为私有,可以自己控制读写权限
  • 优点2:对于写权限,我们可以检测数据的有效性
?
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
#include<iostream>
using namespace std;
#include<string>
//成员属性设置为私有
//1.可以自己控制读写权限
//2.可以写可以检验数据的有效性
//设计人类
class Person {
public:
    //设置姓名
    void setName(string name) {
        m_Name = name;
    }
    //获取姓名
    string getName() {
        return m_Name;
    }
    //获取年龄  只读
    int getAge() {
        //m_Age = 0;//初始化零岁
        return m_Age;
    }
    void setAge(int age) {
        if (age < 0 || age>150) {
            m_Age = 0;
            cout << "你这个老妖精!" << endl;
            return;
        }
        m_Age = age;
    }
    //设置情人  只写
    void setLover(string lover) {
        m_Lover = lover;
    }
 private:
    //姓名  可读可写
    string m_Name;
    //年龄  只读
    int m_Age;
    //情人  只写
    string m_Lover;
};
int main() {
    Person p;
    p.setName ( "张三");
    cout << "姓名为:" <<p.getName() << endl;
    //p.m_Age = 18;
    //p.setAge(18);
    p.setAge(18);
    cout << "年龄为:" << p.getAge() << endl;
    //设置情人为苍井女士
    p.setLover("苍井");
    //cout<<"情人为:"<<p.m_Lover << endl;只写权限,数据不可以访问到的
    system("pause");
    return 0;
}

设计立方体类

?
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include<iostream>
using namespace std;
//立方体类设计
//1.创建立方体类
//2.设计属性
//3.设计行为 获取立方体面积和体积
//4.分别利用全局函数和成员函数 判断两个立方体是否相等
 class Cube {
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;
    }
    // 获取立方体面积
    int calculateS() {
        return 2 * m_L * m_W + 2 * m_L * m_H + 2 * m_W * m_H;
    }
    // 获取立方体体积
    int calculateV() {
        return m_L * m_W * m_H;
    }
    //利用成员函数判断两个立方体是否相等
    bool isSameByClass(Cube &c) {
        if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH()) {
            return true;
        }
        return false;
    }
private:
    //属性
    int m_L;//长
    int m_W;//宽
    int m_H;//高
};
//利用全局函数来判断 两个立方体是否相等
bool isSame(Cube &c1,Cube &c2) {
    if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()) {
        return true;
    }
    return false;
}
int main() {
    //创建立方体对象
    Cube c1;
    c1.setL(10);
    c1.setW(10);
    c1.setH(10);
    cout << "c1的面积为:" <<c1.calculateS() << endl;
    cout << "c1的体积为:" << c1.calculateV() << endl;
    //创建第二个立方体
    Cube c2;
    c2.setL(10);
    c2.setW(10);
    c2.setH(10);
    //利用全局函数判断
    bool ret = isSame(c1,c2);
    if (ret) {
        cout << "c1和c2是相等的" << endl;
    }
    else {
        cout << "c1和c2是不相等的" << endl;
    }
    //利用成员函数判断
    ret = c1.isSameByClass(c2);
    if (ret) {
        cout << "成员函数判断的:c1和c2是相等的" << endl;
    }
    else {
        cout << "成员函数判断的:c1和c2是不相等的" << endl;
    }
    system("pause");
    return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!     

原文链接:https://blog.csdn.net/qq_61430041/article/details/122781500

延伸 · 阅读

精彩推荐
  • C/C++opencv实现视场转换

    opencv实现视场转换

    这篇文章主要为大家详细介绍了opencv实现视场转换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    努力的小带土3742021-11-01
  • C/C++深入理解C++中的new和delete并实现对象池

    深入理解C++中的new和delete并实现对象池

    这篇文章主要介绍了C++中的new和delete并实现对象池,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    -林泽宇11342022-01-06
  • C/C++基于C++实现TCP聊天室功能

    基于C++实现TCP聊天室功能

    这篇文章主要为大家详细介绍了基于C++实现TCP聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    SWY189295644097542021-11-21
  • C/C++C++实现简单猜数字小游戏

    C++实现简单猜数字小游戏

    这篇文章主要为大家详细介绍了C++实现简单猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Ziiiiiiiiii3902022-08-16
  • C/C++详解C/C++内存管理

    详解C/C++内存管理

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,今天给大家分享C/C++内存管理的实例代码,需...

    2021dragon3592021-11-15
  • C/C++C语言实现线索二叉树的定义与遍历示例

    C语言实现线索二叉树的定义与遍历示例

    这篇文章主要介绍了C语言实现线索二叉树的定义与遍历,结合具体实例形式分析了基于C语言的线索二叉树定义及遍历操作相关实现技巧与注意事项,需要的朋...

    PHP开发学习门户9052021-05-14
  • C/C++带你从编码角度分析C++重载原理

    带你从编码角度分析C++重载原理

    这篇文章主要为大家介绍了从编码角度分析C++重载原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    大家好,我是好同学11042022-08-16
  • C/C++C++语法详解之封装、构造函数、析构函数

    C++语法详解之封装、构造函数、析构函数

    这篇文章主要介绍了C++语法详解之封装、构造函数、析构函数的相关知识,通过实例代码给大家详细介绍,对大家的学习或工作具有一定的参考借鉴价值...

    C++教程网5932021-08-23