it编程 > 编程语言 > C/C++

C++ 中类(class)和结构体(struct)的区别

31人参与 2025-04-21 C/C++

在 c++ 中,类(class)和结构体(struct)经常被用来定义复杂的数据结构,但两者之间既有区别又能很好地结合使用。本文将深入讲解它们的区别、关系,并通过丰富的代码案例说明如何灵活运用它们。

在这里插入图片描述

1. 类与结构体的核心区别

1.1 语法上的区别

1.2 使用场景的区别

1.3 概念上的区别

2. 为什么要从结构体扩展到类?

在 c 中,结构体只能存储数据,无法定义与数据相关的操作。这种方式虽然简单,但对于复杂的系统,数据和操作的分离使得代码难以维护。
c++ 引入了类(class),在继承结构体优点的基础上,增加了以下功能:

3. 类和结构体的关系

在 c++ 中,类和结构体可以看作是同源不同职:

如何搭配使用?

4. 代码案例:类与结构体的结合使用

4.1 一个简单的案例:矩形面积计算

我们通过一个例子来说明如何将结构体和类结合使用。

#include <iostream>
using namespace std;

// 定义一个结构体,用来存储矩形的宽和高
struct dimensions {
    double width;
    double height;
};

// 定义一个类,用来操作矩形
class rectangle {
private:
    dimensions dims;  // 使用结构体存储矩形的基本信息

public:
    // 构造函数,初始化矩形
    rectangle(double width, double height) {
        dims.width = width;
        dims.height = height;
    }

    // 设置矩形的宽度和高度
    void setdimensions(double width, double height) {
        dims.width = width;
        dims.height = height;
    }

    // 计算矩形的面积
    double calculatearea() const {
        return dims.width * dims.height;
    }

    // 显示矩形的信息
    void display() const {
        cout << "width: " << dims.width 
             << ", height: " << dims.height 
             << ", area: " << calculatearea() 
             << endl;
    }
};

int main() {
    // 创建一个矩形对象
    rectangle rect(5.0, 10.0);

    // 显示矩形信息
    rect.display();

    // 修改矩形的尺寸
    rect.setdimensions(8.0, 12.0);

    // 再次显示矩形信息
    rect.display();

    return 0;
}

输出结果:

width: 5, height: 10, area: 50
width: 8, height: 12, area: 96

分析:

4.2 扩展案例:支持圆形和矩形的面积计算

进一步扩展,假设我们需要支持矩形和圆形的面积计算,可以通过继承和多态来实现。

#include <iostream>
#include <cmath>
using namespace std;

// 定义一个结构体,用来存储形状的基本属性
struct shapedimensions {
    double width;   // 对于矩形表示宽度
    double height;  // 对于矩形表示高度
    double radius;  // 对于圆形表示半径
};

// 定义一个基类,表示通用形状
class shape {
protected:
    shapedimensions dims;

public:
    virtual double calculatearea() const = 0;  // 纯虚函数,子类必须实现
    virtual void display() const = 0;          // 纯虚函数,用于显示信息
};

// 定义矩形类,继承 shape
class rectangle : public shape {
public:
    rectangle(double width, double height) {
        dims.width = width;
        dims.height = height;
    }

    double calculatearea() const override {
        return dims.width * dims.height;
    }

    void display() const override {
        cout << "rectangle: width = " << dims.width 
             << ", height = " << dims.height 
             << ", area = " << calculatearea() 
             << endl;
    }
};

// 定义圆形类,继承 shape
class circle : public shape {
public:
    circle(double radius) {
        dims.radius = radius;
    }

    double calculatearea() const override {
        return m_pi * dims.radius * dims.radius;
    }

    void display() const override {
        cout << "circle: radius = " << dims.radius 
             << ", area = " << calculatearea() 
             << endl;
    }
};

int main() {
    // 创建矩形和圆形对象
    rectangle rect(5.0, 10.0);
    circle circle(7.0);

    // 显示它们的面积
    rect.display();
    circle.display();

    return 0;
}

输出结果:

rectangle: width = 5, height = 10, area = 50
circle: radius = 7, area = 153.938

分析:

5. 类与结构体结合使用的总结

5.1 类和结构体的分工:

5.2 使用建议:

5.3 结构体和类的关系:

它们可以看作是工具箱中的不同工具:

通过类与结构体的结合,我们可以在代码中清晰地分离数据和逻辑,既保持程序的简洁性,又能灵活扩展功能。

到此这篇关于c++ 中类(class)和结构体(struct)的区别的文章就介绍到这了,更多相关c++  类和结构体内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

深入解析 C++中std::stoul 函数

04-21

PyQt5中QLCDNumber的实现

04-21

Token安全存储的几种方式小结

04-18

C++使用printf语句实现进制转换的示例代码

04-18

QT进行CSV文件初始化与读写操作

04-18

Qt中QScrollArea控件的实现

04-18

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论