C++笔记:黑马关于封装的两个练习案例
一、练习案例1:设计立方体类
设计立方体类(Cube)
求出立方体的面积和体积
分别用全局函数和成员函数判断两个立方体是否相等。
实现代码:
#include<iostream>
using namespace std;
class Cube {
private:
int m_L; //长
int m_W; //宽
int m_H; //高
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;
}
else {
return false;
}
}
};
//利用全局函数判断两个立方体是否相等
bool isSame(Cube& c1, Cube& c2)
{
if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()) {
return true;
}
else {
return false;
}
}
int main() {
//创建立方体对象
Cube c1;
c1.setL(10);
c1.setH(10);
c1.setW(10);
Cube c2;
c2.setL(10);
c2.setH(10);
c2.setW(10);
bool ret1 = isSame(c1, c2);
if (ret1) {
cout << "c1和c2是相等的!" << endl;
}
else {
cout << "c1和c2是不相等的!" << endl;
}
bool ret2 = c1.isSameByClass(c2);
if (ret2) {
cout << "c1和c2是相等的!" << endl;
}
else {
cout << "c1和c2是不相等的!" << endl;
}
}
二、练习案例2:点和圆的关系
设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
实现代码:
#include<iostream>
using namespace std;
class Point {
private:
int m_X;
int m_Y;
public:
//设置x坐标
void setX(int X) {
m_X = X;
}
//设置y坐标
void setY(int Y) {
m_Y = Y;
}
//获取x坐标
int getX() {
return m_X;
}
//获取y坐标
int getY() {
return m_Y;
}
};
class Circle
{
public:
//设置圆半径
void setR(int R) {
m_R = R;
}
//获取圆半径
int getR() {
return m_R;
}
//设置圆心
void setCenter(Point center) {
m_Center = center;
}
//获取圆心
Point getCenter() {
return m_Center;
}
//成员函数判断点和圆的关系
void isInCircleByClass(Point& p) {
//计算点到圆心之间距离的平方
int dis = pow((m_Center.getX() - p.getX()), 2) + pow((m_Center.getY() - p.getY()), 2);
//计算半径的平方
int rDis = pow(m_R, 2);
//判断关系
if (dis == rDis) {
cout << "点在圆上" << endl;
}
else if (dis > rDis) {
cout << "点在圆外" << endl;
}
else {
cout << "点在园内" << endl;
}
}
private:
int m_R; //半径
Point m_Center; //圆心
};
//全局函数判断点和圆的关系
void isInCircle(Circle& c, Point& p) {
//计算点到圆心之间距离的平方
int dis = pow((c.getCenter().getX() - p.getX()),2) + pow((c.getCenter().getY() - p.getY()), 2);
//计算半径的平方
int rDis = pow(c.getR(), 2);
//判断关系
if (dis == rDis) {
cout << "点在圆上" << endl;
}
else if (dis > rDis) {
cout << "点在圆外" << endl;
}
else {
cout << "点在园内" << endl;
}
}
int main() {
//创建圆
Circle c1;
Point center;
//设置圆心坐标和半径
center.setX(10);
center.setY(0);
c1.setCenter(center);
c1.setR(10);
//创建点
Point p;
p.setX(10);
p.setY(10);
isInCircle(c1,p);
c1.isInCircleByClass(p);
return 0;
}
注意:C++没有指数运算符,因此在算平方时,引入了math.h中的pow函数。
参考
视频:视频《黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难》