C++核心编程类的总结封装案例

C++类的总结封装案例

文章目录

1.立方体类的封装

在C++中,我们可以定义一个立方体(Cube)类来封装立方体的属性和方法。立方体的属性可能包括边长(side length),而方法可能包括计算表面积(area)和体积(volume)。

cpp 复制代码
#include <iostream>
using namespace std;

class Cube {
private:
    int  sideLength; // 立方体的边长

public:

    // 计算表面积的方法
    int getArea() {
        return 6 * sideLength * sideLength; // 立方体有6个面,每个面的面积是边长的平方
    }

    // 计算体积的方法
    int getVolume(){
        return sideLength * sideLength * sideLength; // 体积是边长的三次方
    }

    // 设置边长的方法(可选)
    void setSideLength(int length) {
        sideLength = length;
    }
};

int main() {
    // 创建一个边长为5的立方体对象
    Cube cube{};
    cube.setSideLength(5);
    // 输出立方体的表面积和体积
    cout << "Area of the cube: " << cube.getArea() << endl;
    cout << "Volume of the cube: " << cube.getVolume() << endl;

    return 0;
 }

在上面的代码中,我们定义了一个名为Cube的类,它有一个私有成员变量sideLength来存储立方体的边长。我们还定义了两个公有成员函数getAreagetVolume来计算立方体的表面积和体积。此外,我们还提供了一个构造函数来初始化立方体的边长,以及两个可选的公有成员函数setSideLengthgetSideLength来设置和获取边长。在main函数中,我们创建了一个边长为5的立方体对象,并输出了它的表面积和体积。

2.点与圆的关系的封装

在C++中,我们要封装点与圆的关系,首先需要两个类,一个点类和一个圆类。然而在实际开发中,把所有的类都放在一个文件中会导致文件的难以管理,以及可维护性的降低。这时就需要类的分文件编写。

首先要封装一个点类。我们通常在头文件中声明类,在源文件中编写成员函数。

cpp 复制代码
#include "point.h"

/**
 * 设置点的X坐标
 * @param x 新的X坐标值
 */
void point::setX(double x) {
    X = x;
}

/**
 * 设置点的Y坐标
 * @param y 新的Y坐标值
 */
void point::setY(double y) {
    Y = y;
}

/**
 * 获取点的X坐标
 * @return 当前的X坐标值
 */
double point::getX(){
    return X;
}

/**
 * 获取点的Y坐标
 * @return 当前的Y坐标值
 */
double point::getY(){
    return Y;
}

在头文件声明类。

cpp 复制代码
#pragma once
#include "point.h"

/**
 * @class point
 * 二维平面中的点类定义。
 * 该类用于表示二维平面中的一个点,包含点的X坐标和Y坐标。
 */
class point {
    double X; /**< 点的X坐标 */
    double Y; /**< 点的Y坐标 */

public:
    /**
     * 设置点的X坐标。
     * @param x 新的X坐标值。
     */
    void setX(double x);

    /**
     * 设置点的Y坐标。
     * @param y 新的Y坐标值。
     */
    void setY(double y);

    /**
     * 获取点的X坐标。
     * @return 当前点的X坐标值。
     */
    double getX();

    /**
     * 获取点的Y坐标。
     * @return 当前点的Y坐标值。
     */
    double getY();

};

圆类的封装。与点类分文件相同。

cpp 复制代码
#include "circle.h"
#include "point.h"

/**
 * 设置圆的半径
 * @param r 圆的新半径
 */
void  circle::setRadius(double r){
    radius=r;
}

/**
 * 获取圆的半径
 * @return 圆的半径
 */
int circle::getRadius() const{
    return radius;
}

/**
 * 设置圆的中心点
 * @param p 新的中心点坐标
 */
void circle::setCenter(point p){
    center=p;
}

/**
 * 获取圆的中心点
 * @return 圆的中心点坐标
 */
point circle::getCenter() {
    return center;
}

圆类的头文件。

cpp 复制代码
#pragma once
#include "point.h"

/**
 * @brief 表示一个圆的类
 * 
 * 该类定义了一个圆,包括圆的半径和圆心。提供了设置和获取半径以及设置和获取圆心的方法。
 */
class circle {
public:
    /**
     * @brief 设置圆的半径
     * 
     * @param r 圆的新半径
     */
    void setRadius(double r);

    /**
     * @brief 获取圆的半径
     * 
     * @return 圆的半径
     */
    [[nodiscard]] int getRadius() const;

    /**
     * @brief 设置圆的圆心
     * 
     * @param p 新的圆心坐标点
     */
    void setCenter(point p);

    /**
     * @brief 获取圆的圆心
     * 
     * @return 圆的圆心坐标点
     */
    point getCenter();

private:
    double radius; /**< 圆的半径 */
    point center;  /**< 圆的圆心 */
};

在主函数中对类进行调用。

cpp 复制代码
#include "iostream"
using namespace std;
#include "circle.h"
#include "point.h"

/**
 * 判断一个点是否在给定圆上、内部或外部。
 * @param c 圆对象,包含圆的中心和半径。
 * @param p 点对象,要判断的点的坐标。
 */
void isSame(circle& c, point& p)
{
  // 计算圆的半径的平方
  int doRadius = c.getRadius() * c.getRadius();
  // 计算点到圆心的距离的平方
  double length;
  length = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX())
           + ((c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()));
  // 判断点的位置:在圆上、在圆内还是在圆外
  if (doRadius == length)
    cout << "在圆上" << endl;
  else if (doRadius > length)
    cout << "在圆内" << endl;
  else
    cout << "在圆外" << endl;
}

int main() {
    circle c{};
    point p{};
    // 设置圆的半径
    c.setRadius(5);
    // 设置点的坐标
    p.setX(5);
    p.setY(0);
    // 设置圆的中心为给定的点
    c.setCenter(p);
    // 输出圆的中心坐标和半径
    cout << "圆心坐标为(" << c.getCenter().getX() << "," << c.getCenter().getY() << ")" << endl;
    cout << "半径为" << c.getRadius() << endl;
    point p1{};
    // 设置另一个点的坐标
    p1.setX(5);
    p1.setY(10);
    // 判断该点是否在圆上、内部或外部
    isSame(c, p1);
    return 0;
}

主函数用于判断一个点是否在给定圆上、内部或外部。函数接受一个圆对象和一个点对象作为参数,通过计算点到圆心的距离与圆的半径的平方进行比较,来确定点的位置关系。具体步骤如下:

计算圆的半径的平方,存储在变量doRadius中。

计算点到圆心的距离的平方,存储在变量length中。

通过比较doRadiuslength的大小关系,判断点的位置:

doRadius等于length,则点在圆上。

doRadius大于length,则点在圆内。

doRadius小于length,则点在圆外。

根据判断结果,输出相应的信息。

main函数中,首先创建了一个圆对象和一个点对象,并设置了圆的半径和点的坐标。然后通过调用isSame函数,判断另一个点是否在圆上、内部或外部,并输出相关信息。

3.总结

在C++中,类是面向对象编程(OOP)的核心概念之一。类是一种用户定义的数据类型,它允许我们将数据(成员变量)和操作这些数据的方法(成员函数)组合在一起。下面是对C++中类的一些关键知识总结:

  1. 类的定义
    • 使用class关键字定义类。
    • 类可以包含私有(private)、保护(protected)和公有(public)成员。
    • 私有成员只能被类内部的成员函数访问,而公有和保护成员可以在类外部被访问(对于保护成员,派生类也可以访问)。
  2. 成员变量 (也称为属性或字段):
    • 成员变量是类的数据部分,用于存储类的状态。
    • 它们可以在类的声明中定义,也可以在类的实现文件(如果有的话)中定义。
  3. 成员函数 (也称为方法):
    • 成员函数是类的方法部分,定义了可以对类的数据进行哪些操作。
    • 它们可以是普通的函数,也可以是构造函数、析构函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符等特殊成员函数。
  4. 访问修饰符
    • public:类外部可以访问的成员。
    • private:类外部无法访问的成员,只能被类内部(包括成员函数和友元)访问。
    • protected:与private类似,但允许派生类访问。

这些是C++中类的一些关键概念和特性。通过学习和使用这些特性,我们可以编写更加灵活、可重用和易于维护的代码。

相关推荐
测试界的酸菜鱼10 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
我是谁??10 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
小码农<^_^>12 分钟前
优选算法精品课--滑动窗口算法(一)
算法
羊小猪~~14 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
晨曦_子画19 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Black_Friend28 分钟前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
软工菜鸡40 分钟前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生42 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
发霉的闲鱼43 分钟前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc
小c君tt1 小时前
MFC中Excel的导入以及使用步骤
c++·excel·mfc