练习案例1:设计立方体类
设计立方体类(Cube)
需求1:求出立方体的面积和体积
需求2:分别用全局函数和成员函数判断两个立方体是否相等
#include<iostream>
using namespace std;
#include<string>
class Cube
{
public:
//设置长宽高
void setm_l(int l)
{
m_l = l;
}
void setm_w(int w)
{
m_w = w;
}
void setm_h(int h)
{
m_h = h;
}
//获取长宽高
int getm_l()
{
return m_l;
}
int getm_w()
{
return m_w;
}
int getm_h()
{
return m_h;
}
//计算面积
int caculateMJ()
{
int MJ = 0;
MJ =2*( m_l * m_w + m_l * m_h + m_w * m_h);
cout << "立方体面积为" << MJ << endl;
return MJ;
}
//计算体积
int caculateTJ()
{
int TJ = 0;
TJ = m_l * m_w * m_h;
cout << "立方体体积为" << TJ << endl;
return TJ;
}
//成员函数比较两个立方体是否相等
bool judge(Cube &c) //只需要传入一个变量即可(类可以作为一个整体作为参数传入)
{
if( c.getm_l() == m_l && c.getm_w() == m_w && c.getm_h() == m_h )
{
return true;
}
return false;
}
private:
int m_l;
int m_w;
int m_h;
};
bool issame(Cube &c1 , Cube &c2) //全局函数判断两个立方体是否相等,需要传入两个立方体类的参数
{
if( c1.getm_l() == c2.getm_l() && c1.getm_w() == c2.getm_w() && c1.getm_h() == c2.getm_h() )
{
return true;
}
return false;
}
int main()
{
int l,w,h;
int MJ1,TJ1,MJ2,TJ2;
Cube c1;
cout << "请输入第一个立方体的长" << endl;
cin >> l;
cout << "请输入第一个立方体的宽" << endl;
cin >> w;
cout << "请输入第一个立方体的高" << endl;
cin >> h;
c1.setm_l(l);
c1.setm_w(w);
c1.setm_h(h);
MJ1 = c1.caculateMJ();
TJ1 = c1.caculateTJ();
Cube c2;
cout << "请输入第二个立方体的长" << endl;
cin >> l;
cout << "请输入第二个立方体的宽" << endl;
cin >> w;
cout << "请输入第二个立方体的高" << endl;
cin >> h;
c2.setm_l(l);
c2.setm_w(w);
c2.setm_h(h);
MJ2 = c2.caculateMJ();
TJ2 = c2.caculateTJ();
bool flag = issame(c1,c2);
cout << "全局函数判断:" << endl;
if(flag)
{
cout << "两个立方体相等" << endl;
}
else
{
cout << "两个立方体不相等" << endl;
}
bool flag2 = c1.judge(c2);
cout << "成员函数判断:" << endl;
if(flag2)
{
cout << "两个立方体相等" << endl;
}
else
{
cout << "两个立方体不相等" << endl;
}
system("pause");
return 0;
}
练习案例2:点和圆的关系
需求1:设计一个圆形类(Circle)和一个点类(Point)并要求在圆类中包含点类,实现类的嵌套
需求2:计算点和圆的关系
需求3:用分文件编写的形式编写
头文件:relation.h
#pragma once
//防止头文件重
#include<iostream>
using namespace std;
//只保类中行为的声明,具体行为(函数)实现直接删除(同函数)
class Point
{
public:
void setx(int x); //删除具体行为后记得加;
void sety(int y);
int getx();
int gety();
private:
int p_x;
int p_y;
};
class Circle
{
public:
void setr(int r);
int getr();
void setcenter(Point &c);
Point getcenter();
private:
int m_r;
Point center; //可以让一个类成为另一个类的成员(实现类的嵌套)
};
void relationship(Circle &c, Point &p);
源文件:point.cpp
#include "relation.h"
//去掉class和变量定义,只留下对应函数的具体实现
//但是要加上对应的作用域 Point:: / Circle::
//设置点的坐标
void Point::setx(int x)
{
p_x = x;
}
void Point::sety(int y)
{
p_y = y;
}
//获取点的坐标
int Point::getx()
{
return p_x;
}
int Point::gety()
{
return p_y;
}
//shift + tab 整体缩进
源文件:circle.cpp
#include "relation.h"
//设置圆的半径
void Circle::setr(int r)
{
m_r = r;
}
//获得圆的半径
int Circle::getr()
{
return m_r;
}
//设置圆的中心(通过嵌套类中的行为进行设置)
void Circle::setcenter(Point &c)
{
center.setx(c.getx());
center.sety(c.gety());
}
//获取圆的圆心(通过嵌套类中的行为进行获取)
Point Circle::getcenter()
{
return center;
}
源文件:relationship.cpp
#include "relation.h"
void relationship(Circle &c, Point &p)
{
int flag = (c.getcenter().getx() - p.getx() )*(c.getcenter().getx() - p.getx() ) + (c.getcenter().gety() - p.gety())*(c.getcenter().gety() - p.gety() );
int r = c.getr()* c.getr();
if( flag == r)
{
cout << "点在圆上" << endl;
}
else if(flag > r )
{
cout << "点在圆外" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}
源文件:main.cpp
#include"relation.h"
int main()
{
//初始化圆
Circle c;
c.setr(10);
//初始化圆心
Point center;
center.setx(10);
center.sety(0);
//将初始化的圆心和圆进行嵌套
c.setcenter(center);
//初始化点的坐标
Point p;
p.setx(10);
p.sety(11);
//判断点和圆的关系
relationship(c,p);
system("pause");
return 0;
}