0

0

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

P粉602998670

P粉602998670

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

|

577人浏览过

|

来源于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
的。除此之外,它们几乎是完全相同的,都可以有成员变量、成员函数(方法)、构造函数、析构函数,甚至可以继承和实现多态。

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

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

BgSub
BgSub

免费的AI图片背景去除工具

下载

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

当然可以!这正是C++

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

我们拿之前的

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

#include  // 需要用到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
。这让代码的结构感非常强,也更容易理解。我个人在处理一些配置文件解析或者图形数据时,就经常会用到这种嵌套结构,它真的能让数据模型变得非常直观。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

379

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

607

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

348

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

255

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

583

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

519

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

630

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

595

2023.09.22

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 1.7万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.2万人学习

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

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号