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