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);
}



目录
相关文章
|
23天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
21 2
|
23天前
|
C++
C++命名空间学习应用案例
C++中的命名空间示例:通过`my_namespace`防止命名冲突,包含`print_message()`函数,在`main()`中调用时需加上命名空间前缀`my_namespace::`。
14 3
|
21天前
|
算法 Java 程序员
【C++专栏】C++入门 | 类和对象 | 面向过程与面向对象的初步认识
【C++专栏】C++入门 | 类和对象 | 面向过程与面向对象的初步认识
21 0
|
7天前
|
C++
C++从入门到精通:2.1.2函数和类——深入学习面向对象的编程基础
C++从入门到精通:2.1.2函数和类——深入学习面向对象的编程基础
|
13天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
25 1
|
13天前
|
C++
面向对象的C++题目以及解法
面向对象的C++题目以及解法
19 0
|
15天前
|
编译器 C语言 C++
【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装
【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装
|
22天前
|
存储 编译器 程序员
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
|
23天前
|
存储 程序员 编译器
c++面向对象概述、内存分析、引用、函数
c++面向对象概述、内存分析、引用、函数
|
23天前
|
C++
C++语言学习数组和字符串应用案例
【4月更文挑战第8天】该文展示了C++中数组和字符串的应用案例。数组示例定义了一个整数数组并访问、修改其元素,计算了元素之和。字符串示例中,定义了一个字符串并遍历、修改字符,进行了字符串拼接、查找子字符串及替换操作。
10 3