20 C++ - 面向对象程序设计案例

简介: 20 C++ - 面向对象程序设计案例

1. 设计立方体类

设计立方体类(Cube),求出立方体的面积( 2*a*b + 2*a*c + 2*b*c )和体积( a * b * c),分别用全局函数和成员函数判断两个立方体是否相等。

//立方体类
class Cub{
public:
  void setL(int l){ mL = l; }
  void setW(int w){ mW = w; }
  void setH(int h){ mH = h; }
  int getL(){ return mL; }
  int getW(){ return mW; }
  int getH(){ return mH; }
  //立方体面积
  int caculateS(){ return (mL*mW + mL*mH + mW*mH) * 2; }
  //立方体体积
  int caculateV(){ return mL * mW * mH; }
  //成员方法
  bool CubCompare(Cub& c){
    if (getL() == c.getL() && getW() == c.getW() && getH() == c.getH()){
      return true;
    }
    return false;
  }
private:
  int mL; //长
  int mW; //宽
  int mH; //高
};
//比较两个立方体是否相等
bool CubCompare(Cub& c1, Cub& c2){
  if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()){
    return true;
  }
  return false;
}
void test(){
  Cub c1, c2;
  c1.setL(10);
  c1.setW(20);
  c1.setH(30);
  c2.setL(20);
  c2.setW(20);
  c2.setH(30);
  cout << "c1面积:" << c1.caculateS() << " 体积:" << c1.caculateV() << endl;
  cout << "c2面积:" << c2.caculateS() << " 体积:" << c2.caculateV() << endl;
  //比较两个立方体是否相等
  if (CubCompare(c1, c2)){
    cout << "c1和c2相等!" << endl;
  }
  else{
    cout << "c1和c2不相等!" << endl;
  }
  if (c1.CubCompare(c2)){
    cout << "c1和c2相等!" << endl;
  }
  else{
    cout << "c1和c2不相等!" << endl;
  }
}

2. 点和圆的关系

设计一个圆形类(AdvCircle),和一个点类(Point),计算点和圆的关系。

假如圆心坐标为x0, y0, 半径为r,点的坐标为x1, y1:

  1. 在圆上:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) == r*r
  2. 点在圆内:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) < r*r
  3. 点在圆外:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) > r*r
//点类
class Point{
public:
  void setX(int x){ mX = x; }
  void setY(int y){ mY = y; }
  int getX(){ return mX; }
  int getY(){ return mY; }
private:
  int mX;
  int mY;
};
//圆类
class Circle{
public:
  void setP(int x,int y){
    mP.setX(x);
    mP.setY(y);
  }
  void setR(int r){ mR = r; }
  Point& getP(){ return mP; }
  int getR(){ return mR; }
  //判断点和圆的关系
  void IsPointInCircle(Point& point){
    int distance = (point.getX() - mP.getX()) * (point.getX() - mP.getX()) + (point.getY() - mP.getY()) * (point.getY() - mP.getY());
    int radius = mR * mR;
    if (distance < radius){
      cout << "Point(" << point.getX() << "," << point.getY() << ")在圆内!" << endl;
    }
    else if (distance > radius){
      cout << "Point(" << point.getX() << "," << point.getY() << ")在圆外!" << endl;
    }
    else{
      cout << "Point(" << point.getX() << "," << point.getY() << ")在圆上!" << endl;
    }
  }
private:
  Point mP; //圆心
  int mR; //半径
};
void test(){
  //实例化圆对象
  Circle circle;
  circle.setP(20, 20);
  circle.setR(5);
  //实例化点对象
  Point point;
  point.setX(25);
  point.setY(20);
  circle.IsPointInCircle(point);
}



目录
相关文章
|
1月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
80 11
|
2月前
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
37 3
|
2月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
42 3
|
2月前
|
存储 安全 编译器
【C++核心】一文理解C++面向对象(超级详细!)
这篇文章详细讲解了C++面向对象的核心概念,包括类和对象、封装、继承、多态等。
25 2
|
1月前
|
存储 编译器 C语言
【C++】初识面向对象:类与对象详解
【C++】初识面向对象:类与对象详解
|
2月前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
19 0
|
3月前
|
存储 安全 数据处理
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
|
3月前
|
算法 数据可视化 C++
【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】
【C++】C++ 学生信息管理系统(源码+面向对象)【独一无二】
|
4月前
|
存储 开发框架 Java
|
4月前
|
Java C++ iOS开发