31人参与 • 2025-04-21 • C/C++
在 c++ 中,类(class)和结构体(struct)经常被用来定义复杂的数据结构,但两者之间既有区别又能很好地结合使用。本文将深入讲解它们的区别、关系,并通过丰富的代码案例说明如何灵活运用它们。
在 c 中,结构体只能存储数据,无法定义与数据相关的操作。这种方式虽然简单,但对于复杂的系统,数据和操作的分离使得代码难以维护。
c++ 引入了类(class),在继承结构体优点的基础上,增加了以下功能:
在 c++ 中,类和结构体可以看作是同源不同职:
我们通过一个例子来说明如何将结构体和类结合使用。
#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
分析:
dimensions
: 负责存储矩形的宽度和高度。rectangle
: 负责操作矩形,比如设置尺寸和计算面积。进一步扩展,假设我们需要支持矩形和圆形的面积计算,可以通过继承和多态来实现。
#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
分析:
shapedimensions
: 存储矩形的宽高和圆形的半径。shape
: 定义通用接口(如 calculatearea
和 display
)。rectangle
和 circle
: 实现特定形状的逻辑。它们可以看作是工具箱中的不同工具:
通过类与结构体的结合,我们可以在代码中清晰地分离数据和逻辑,既保持程序的简洁性,又能灵活扩展功能。
到此这篇关于c++ 中类(class)和结构体(struct)的区别的文章就介绍到这了,更多相关c++ 类和结构体内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论