封装是c++面向对象的三大特性之一
封装的意义:
1.将属性和行为作为一个整体 表现生活中的事物
2.将属性和行为加以权限控制

[] [c++]
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
#include<bits/stdc++.h>
using namespace std;

//设计一个学生类 属性有姓名和学号
//可以给姓名和学号赋值 可以显示学生姓名以及学号

class Student
{
//访问权限
//公共权限
public:
//属性 半径
string m_Name;
int m_Id;

//行为 成员函数以及成员方法
//显示姓名以及学号
void showStudent()
{
cout<<"姓名是"<<m_Name<<" "<<"学号是"<<m_Id<<endl;
}

//给姓名赋值
void setN(string name,int id)
{
m_Name=name;
m_Id=id;
}
};

int main()
{
//创建具体的学生(对象)
//实例化
Student s1;
//给学生对象的属性进行赋值
s1.setN("张三",123);

s1.showStudent();

system("pause");

}

三种访问权限
公共权限 public 成员 类内类外都可以访问
保护权限 protected 成员 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容
私有权限 private 成员 类内可以访问 类外不可以访问 儿子不可以访问父亲中的保护内容(继承知识)

struct和class唯一的区别就在于默认的访问权限不同
struct 默认公共
class 默认私有
成员属性设置为私有 可以自己控制读写的权限

类中可以用其余类作为成员存在

[] [c++]
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
#include<bits/stdc++.h>
using namespace std;

class Point
{
public:
//设置x y
void setX(int x)
{
m_X=x;
}

void setY(int y)
{
m_Y=y;
}
//获取x,y
int getX()
{
return m_X;
}
int getY()
{
return m_Y;
}
private:
int m_X;
int m_Y;
};


class Circle
{
public:
//设置半径
void setR(int r)
{
m_R=r;
}
//设置圆心
void setCenter(Point center)
{
m_Center=center;
}
//获取圆心
Point getCenter()
{
return m_Center;
}

private:
int m_R;
Point m_Center;
};
//计算两点之间距离 平方
void isInCircle(Circle &c,Point &p)
{
int distance=
(c.getCenter().getX()-p.getX())*(c.getCenter().getX()-p.getX())
+(c.getCenter().getY()-p.getY())*(c.getCenter().getY()-p.getY());

}
int main()
{
Circle c;
Point p;
//略
return 0;
}

同时还有极其重要的一点 我们可以拆分 例如头文件里写声明 源文件里写实现函数

源文件(point.h)第一行写#pragma once 防止头文件重复包含

将类复制到源文件 删到只剩声明 分号补全

源文件里#include “point.h”
只需要函数了
因为函数是成员函数 所以需要加上作用域 如类名为Point
void Point::setX(int x)
修改过后的两个文件如下(只对Point操作了)

头文件

[] [c++]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include<bits/stdc++.h>

using namespace std;

class Point
{
public:
//设置x y
void setX(int x);

void setY(int y);
//获取x,y
int getX();
int getY();
private:
int m_X;
int m_Y;
};

源文件

[] [c++]
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
#include<bits/stdc++.h>
#include "point.h"
using namespace std;


void Point::setX(int x) {
m_X=x;
}

void Point::setY(int y) {
m_Y=y;
}
//获取x,y
int Point::getX() {
return m_X;
}
int Point::getY() {
return m_Y;
}



class Circle {
public:
//设置半径
void setR(int r) {
m_R=r;
}
//设置圆心
void setCenter(Point center) {
m_Center=center;
}
//获取圆心
Point getCenter() {
return m_Center;
}

private:
int m_R;
Point m_Center;
};
//计算两点之间距离 平方
void isInCircle(Circle &c,Point &p) {
int distance=
(c.getCenter().getX()-p.getX())*(c.getCenter().getX()-p.getX())
+(c.getCenter().getY()-p.getY())*(c.getCenter().getY()-p.getY());

}
int main() {
Circle c;
Point p;
//略
return 0;
}