讲师中心 微信公众号
AI工具推荐 视频效率加速

C++结构体如何定义 struct关键字基本语法

陌静姑娘_1285

陌静姑娘_1285

发布时间:2025-08-22 08:02:01

|

597人浏览过

|

来源于php中文网

原创

C++中定义结构体使用struct关键字,可组合不同类型数据,支持成员函数、构造函数及嵌套结构体,struct与class区别主要在默认访问权限,通常struct用于数据封装,class用于复杂行为抽象。

c++结构体如何定义 struct关键字基本语法

C++中定义结构体,核心就是使用

struct
关键字来创建一种自定义的数据类型,它能把不同类型的数据项组合在一起,形成一个有逻辑的整体。这就像是给一堆散乱的零件找了个合适的收纳盒,让它们能作为一个整体被管理和使用。

解决方案

说起

struct
,它在C++里头扮演的角色,其实比很多人想象的要灵活得多。最基础的定义方式,你只需要写上
struct
,然后跟着你给这个结构体起的名字,接着在大括号里列出它包含的成员变量。

比如,我们要表示一个三维空间中的点,它有x、y、z三个坐标:

struct Point3D {
    double x;
    double y;
    double z;
};

定义好这个结构体后,你就可以像使用内置类型(比如

int
或
double
)一样去声明它的变量了:

立即学习“C++免费学习笔记(深入)”;

Point3D myPoint; // 声明一个Point3D类型的变量
myPoint.x = 10.0; // 通过点运算符访问并赋值成员
myPoint.y = 20.5;
myPoint.z = 30.0;

// 也可以在声明时进行初始化,C++11及以后支持更简洁的列表初始化
Point3D anotherPoint = {1.0, 2.0, 3.0};
Point3D yetAnotherPoint{4.0, 5.0, 6.0}; // 更现代的写法

这里有个小细节,在C语言里,你声明结构体变量时可能需要写

struct Point3D myPoint;
,但在C++里,
struct
关键字在声明变量时是可以省略的,直接写
Point3D myPoint;
就足够了,这让代码看起来更简洁。

C++中的
struct
和
class
到底有什么区别?

这个问题,我个人觉得是C++初学者最常感到困惑的地方之一。技术上讲,在C++里,

struct
和
class
的唯一本质区别在于默认的访问权限。
struct
的成员默认是
public
的,而
class
的成员默认是
private
的。除此之外,它们几乎是完全相同的,都可以有成员变量、成员函数(方法)、构造函数、析构函数,甚至可以继承和实现多态。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

那么,既然功能上几乎一样,为什么还要分

struct
和
class
呢?这更多是一种约定俗成和语义上的区分。我们通常会用
struct
来定义那些主要用于封装数据的“轻量级”类型,也就是所谓的“Plain Old Data”(POD)结构,或者说,它的核心职责是数据容器,行为(方法)是次要的或辅助性的。而
class
则更多地用于定义那些具有复杂行为、需要严格封装和抽象的“重量级”对象。当你看到一个
struct
,潜意识里就会觉得它可能是一个数据集合;看到
class
,则会联想到它可能封装了更复杂的逻辑和状态。这种约定能帮助我们更好地理解代码意图。

结构体可以有成员函数(方法)和构造函数吗?

当然可以!这正是C++

struct
比C语言
struct
强大得多的地方。在C++中,
struct
完全可以拥有自己的成员函数,这些函数可以操作结构体内部的数据。它也可以有构造函数,用于在创建结构体对象时进行初始化。这让
struct
变得更像一个“迷你类”。

我们拿之前的

Point3D
举例,给它加一个计算到原点距离的方法,再加一个构造函数:

#include <cmath> // 需要用到sqrt和pow函数

struct Point3D {
    double x;
    double y;
    double z;

    // 构造函数:在创建Point3D对象时自动调用,用于初始化成员
    Point3D(double initialX, double initialY, double initialZ) {
        x = initialX;
        y = initialY;
        z = initialZ;
    }

    // 成员函数:计算点到原点的距离
    double distanceFromOrigin() const { // const表示这个函数不会修改成员变量
        return std::sqrt(x * x + y * y + z * z);
    }
};

// 使用示例
// Point3D p1; // 错误:现在有了自定义构造函数,必须提供参数
Point3D p1(1.0, 2.0, 3.0);
double dist = p1.distanceFromOrigin(); // 调用成员函数
// std::cout << "Distance from origin: " << dist << std::endl;

你看,有了构造函数,我们创建对象时就更方便了,可以直接传入初始值。而成员函数则让操作结构体数据变得更加内聚和直观。

如何在C++中定义嵌套结构体?

有时候,我们的数据结构会比较复杂,需要在一个结构体内部再定义另一个结构体。这在C++中是完全允许的,我们称之为嵌套结构体。这就像一个大盒子里面又放了几个小盒子,每个小盒子也装着它自己的东西。这种方式非常适合表示具有层级关系的数据。

想象一下,我们要定义一个表示“线段”的结构体,一条线段由两个点组成(起点和终点)。我们可以这样来定义:

struct Point { // 先定义一个简单的点结构体
    int x;
    int y;
};

struct LineSegment { // 定义线段结构体
    Point startPoint; // 嵌套Point结构体作为成员
    Point endPoint;   // 另一个Point结构体成员
    int id;           // 线段的ID
};

// 使用示例
LineSegment myLine;
myLine.id = 101;
myLine.startPoint.x = 0; // 访问嵌套结构体的成员
myLine.startPoint.y = 0;
myLine.endPoint.x = 10;
myLine.endPoint.y = 20;

// 也可以在初始化时嵌套初始化
LineSegment anotherLine = {{1, 1}, {5, 5}, 102}; // 注意大括号的层级

通过这种方式,我们可以非常清晰地组织复杂的数据结构。访问嵌套结构体的成员时,只需要连续使用点运算符(

.
)就可以了,比如
myLine.startPoint.x
。这让代码的结构感非常强,也更容易理解。我个人在处理一些配置文件解析或者图形数据时,就经常会用到这种嵌套结构,它真的能让数据模型变得非常直观。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3331

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

554

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

562

2026.02.12

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6284

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3324

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1892

2025.10.17

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

375

2025.11.27

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

5194

2025.06.09

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Reference
C++ Reference

共0课时 | 0人学习

RabbitMQ 教程手册
RabbitMQ 教程手册

共0课时 | 0人学习

C# 教程
C# 教程

共94课时 | 22.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn