封装是C++三大特性之一
首先是类的基本概念,类是一群相同相似事物的集合,一个类有属性和行为
class Person
{
属性
int height;
string name;
.........
行为
void getheight()
{
...........
}
为函数
};
一般称类中的属性和行为都为成员
属性------成员属性
行为------成员函数
一个类是集合,我们要使用的是一个个具体的对象、
这时候就需要创建了 类名 + 对象名
Person p1
一个类中,并不是所有成员都是公有的
类中有三种访问权限
public protected private
在C++中 class和struct 其实差不多
只不过class中的成员默认是private
struct中默认是public
为了自己控制读写权限
我们一般将成员属性私有化
只提供接口函数
下面是两个封装的设计案例
1.立方体类
要求 : 求出体积和面积
分别用成员函数和全局函数判断两个立方体是否相等
分析:判断两个立方体是否相等,肯定要分别比较它们的长宽高,只有在对应相等的情况下才相等
在全局函数中,只要传两个实例对象,再判断就可以了
在成员函数中,在一个实例化对象中的成员函数中传入另一个实例对象,再判断即可
下面是代码
#include <iostream>
using namespace std;
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 V()
{
return m_L * m_W * m_H;
}
int S()
{
return 2*(m_L * m_W +m_L* m_H+m_H*m_W);
}
bool judge(Cube& C)
{
if (getL() == C.getL() && getW() == C.getW() && getH() == C.getH())
{
return true;
}
return false;
}
private:
int m_L;
int m_W;
int m_H;
};
bool judge(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, C2;
C1.setL(10);
C1.setW(10);
C1.setH(10);
C2.setL(10);
C2.setW(10);
C2.setH(20);
cout << "C1面积为" << C1.S() << " C1体积为" << C1.V() << endl;
cout << "C2面积为" << C2.S() << " C2体积为" << C2.V() << endl;
if (C1.judge(C2) == true)
{
cout << "相等!" << endl;
}
else
cout << "不相等" << endl;
if (judge(C1,C2) == true)
{
cout << "相等!" << endl;
}
else
cout << "不相等" << endl;
}
2.点与圆的关系
要求:设计一个圆类和点类,计算他们间的关系
这个也很简单,直接上写的代码了
#include <iostream>
using namespace std;
class Point
{
public:
void setX(int x)
{
m_x = x;
}
int getX()
{
return m_x;
}
void setY(int y)
{
m_y = y;
}
int getY()
{
return m_y;
}
private:
int m_x;
int m_y;
};
class Circle
{
public:
//设置半径
void setR(int r)
{
m_r = r;
}
//获取半径
int getR()
{
return m_r;
}
//设置圆心
void setCenter(Point center)
{
CircleCenter = center;
}
//获取圆心
Point getCenter()
{
return CircleCenter;
}
private:
//圆心的坐标和圆的半径
Point CircleCenter;
int m_r;
};
//计算圆心到点的距离与半径比较
int judge(Circle& C, Point& P)
{
int Ddistance;
Ddistance = ((C.getCenter().getX() - P.getX()) * (C.getCenter().getX() - P.getX())) + ((C.getCenter().getY() - P.getY()) * (C.getCenter().getY() - P.getY()));
return Ddistance;
}
int main()
{
Point p;//点
Point C;//圆心
Circle CC;
int dis=5;
p.setX(10);
p.setY(10);
C.setX(20);
C.setY(20);
CC.setR(dis);
CC.setCenter(C);
int ret = judge(CC, p);
if (ret - dis * dis>0)
{
cout << "圆外" << endl;
}
if (ret - dis * dis==0)
{
cout << "圆上" << endl;
}
if (ret - dis * dis<0)
{
cout << "圆内" << endl;
}
}