面向对象的编程练习
1、练习一:设计长方体类(cuboid)
求出长方体的面积和体积
分别用全局函数和成员函数判断两个长方体是否相等。
class Cuboid
{
//属性
private:
int c_L;
int c_W;
int c_H;
//行为
public:
//计算面积
int c_Area()
{
int Area = 2 * (c_L * c_W + c_L * c_H + c_W * c_H);
return Area;
}
//计算体积
int c_Bulk()
{
int Bulk = c_L * c_W * c_H;
return Bulk;
}
//接口
//设置/获取长宽高
void Setc_L(int L)
{
if (L < 0)
{
cout << "输入不合理!" << endl;
L = 0;
return;
}
c_L = L;
}
int Getc_L()
{
return c_L;
}
void Setc_W(int W)
{
if (W < 0)
{
cout << "输入不合理!" << endl;
W = 0;
return;
}
c_W = W;
}
int Getc_W()
{
return c_W;
}
void Setc_H(int H)
{
if (H < 0)
{
cout << "输入不合理!" << endl;
H = 0;
return;
}
c_H = H;
}
int Getc_H()
{
return c_H;
}
//利用成员函数判断 两个长方体是否相等
bool IfIsSameC(Cuboid &c)
{
if (c_L == c.Getc_L() && c_W == c.Getc_W() && c_H == c.Getc_H())
{
return true;
}
return false;
}
};
//利用全局函数判断 两个长方体是否相等
bool IfIsSame(Cuboid &c1, Cuboid &c2)
{
if (c1.Getc_L() == c2.Getc_L() && c1.Getc_W() == c2.Getc_W() && c1.Getc_H() == c2.Getc_H())
{
return true;
}
else
{
return false;
}
}
int main18()
{
Cuboid c1;
c1.Setc_L(10);
c1.Setc_W(20);
c1.Setc_H(30);
cout << "面积是:" << c1.c_Area() << endl;
cout << "体积是:" << c1.c_Bulk() << endl;
Cuboid c2;
c2.Setc_L(10);
c2.Setc_W(20);
c2.Setc_H(30);
//利用全局函数判断
bool ret1 = IfIsSame(c1, c2);
if (ret1)
{
cout << "c1和c2是相等的" << endl;
}
else
{
cout << "c1和c2不相等" << endl;
}
//利用成员函数判断
bool ret2 = c1.IfIsSameC(c2);
if (ret2)
{
cout << "c1和c2是相等的!" << endl;
}
else
{
cout << "c1和c2不相等!" << endl;
}
system("pause");
return 0;
}
2、练习二:点和圆的关系
设计一个圆类(circle)和一个点类(point),判断点和圆的关系(圆内、圆上、圆外)?
方法一:普通写法
//点类
class Point
{
private:
int p_X;
int p_Y;
public:
//设置/获取X、Y
void SetX(int x)
{
p_X = x;
}
int GetX()
{
return p_X;
}
void SetY(int y)
{
p_Y = y;
}
int GetY()
{
return p_Y;
}
};
//圆类
class Circle1
{
private:
int c_R; //半径
Point c_Center; //圆心
public:
//设置获取圆心、半径
void SetR(int r)
{
c_R = r;
}
int GetR()
{
return c_R;
}
//void SetCenter(int x, int y)
void SetCenter(Point center)
{
//c_Center.SetX(x);
//c_Center.SetY(y);
c_Center = center;
}
Point GetCenter()
{
return c_Center;
}
};
//判断点和圆的关系
void IsInCircle(Circle1 &c, Point &p)
{
//计算点到圆心的距离
int len;
len = pow((c.GetCenter().GetX() - p.GetX()), 2) + pow((c.GetCenter().GetY() - p.GetY()), 2);
int distance;
distance = pow(len, 0.5);//开平方
if (distance < c.GetR())
{
cout << "点在圆内" << endl;
return;
}
else if (distance > c.GetR())
{
cout << "点在圆外" << endl;
return;
}
else
{
cout << "点在圆上" << endl;
return;
}
}
int main19()
{
//创建圆
Circle1 c1;
c1.SetR(5);
Point center;
center.SetX(5);
center.SetY(0);
c1.SetCenter(center);
//创建点
Point p1;
p1.SetX(5);
p1.SetY(5);
IsInCircle(c1, p1);
system("pause");
return 0;
}
方法二:文件拆分
将点类(point)进行拆分
Point.h文件
#pragma once //防止头文件重复包含
#include <iostream>
using namespace std;
//点类
class Point
{
private:
int p_X;
int p_Y;
public:
//设置/获取X、Y
void SetX(int x);
int GetX();
void SetY(int y);
int GetY();
};
//去掉函数的实现,只写声明
Point.cpp文件
#include "Point.h"
//点类
//设置/获取X、Y
void Point::SetX(int x) //Point:: -> 作用域,用来说明该函数是一个成员函数
{
p_X = x;
}
int Point::GetX() //Point作用域下的成员函数 GetX()
{
return p_X;
}
void Point::SetY(int y)
{
p_Y = y;
}
int Point::GetY()
{
return p_Y;
}
//去掉class Point{}; pbulic/private等权限说明 和类的属性,只留下函数的实现
主函数
#include "Point.h"
class Circle1
{
private:
int c_R; //半径
Point c_Center; //圆心
public:
//设置获取圆心、半径
void SetR(int r)
{
c_R = r;
}
int GetR()
{
return c_R;
}
//void SetCenter(int x, int y)
void SetCenter(Point center)
{
//c_Center.SetX(x);
//c_Center.SetY(y);
c_Center = center;
}
Point GetCenter()
{
return c_Center;
}
};
//判断点和圆的关系
void IsInCircle(Circle1 &c, Point &p)
{
//计算点到圆心的距离
int len;
len = pow((c.GetCenter().GetX() - p.GetX()), 2) + pow((c.GetCenter().GetY() - p.GetY()), 2);
int distance;
distance = pow(len, 0.5);//开平方
if (distance < c.GetR())
{
cout << "点在圆内" << endl;
return;
}
else if (distance > c.GetR())
{
cout << "点在圆外" << endl;
return;
}
else
{
cout << "点在圆上" << endl;
return;
}
}
int main19()
{
//创建圆
Circle1 c1;
c1.SetR(5);
Point center;
center.SetX(5);
center.SetY(0);
c1.SetCenter(center);
//创建点
Point p1;
p1.SetX(5);
p1.SetY(5);
IsInCircle(c1, p1);
system("pause");
return 0;
}
(哔哩哔 哩黑马程序员 C++教程 学习笔记,如有侵权请联系删除)