22结构体类型

简介: 22结构体类型

C++入门——60s从0到1

结构体类型

 

当我们需要描述一个实体的多个属性时,结构体是一种非常有用的数据类型。在C++中,我们可以使用结构体来定义自己的数据类型,从而更好地组织和管理数据。

 

本篇文章将详细介绍C++中的结构体类型,包括结构体的定义、成员变量的访问、结构体对象的创建和初始化、结构体指针的使用、结构体嵌套和结构体继承等内容。

 

结构体的定义

 

结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。在C++中,结构体的定义通常包含关键字struct,后跟结构体名和成员列表。下面是一个简单的示例:

 

struct Person {

   string name;

   int age;

   float height;

};

 

在上面的示例中,我们定义了一个名为Person的结构体类型,它包含三个成员变量:name、age和height。这些成员变量的数据类型分别为string、int和float。

 

成员变量的访问

 

我们可以通过点号运算符来访问结构体的成员变量。下面是一个示例:

 

Person p1 = {"Tom", 20, 1.75};

cout << "Name: " << p1.name << endl;

cout << "Age: " << p1.age << endl;

cout << "Height: " << p1.height << endl;

 

在上面的示例中,我们创建了一个名为p1的结构体对象,并初始化了它的成员变量。然后我们通过点号运算符访问了结构体的成员变量,并输出了它们的值。

 

结构体对象的创建和初始化

 

我们可以使用以下语法来创建一个结构体对象:

 

struct Person p1 = {"Tom", 20, 1.75};

 

在上面的示例中,我们使用关键字struct来声明一个名为p1的结构体对象,并使用花括号{}初始化了它的成员变量。注意,花括号{}中的值必须与结构体的成员变量的顺序相对应。

 

除了使用花括号{}进行初始化外,我们还可以单独对每个成员变量进行初始化。下面是一个示例:

 

struct Person {
    string name;
    int age;
    float height;
};
 
int main() {
    Person p1 = {"Tom", 20}; // 对name和age进行初始化,height的值为默认值0.0f
    p1.height = 1.75f; // 对height进行单独初始化
    cout << "Name: " << p1.name << endl;
    cout << "Age: " << p1.age << endl;
    cout << "Height: " << p1.height << endl;
    return 0;
}

 

在上面的示例中,我们对结构体进行了单独的初始化。首先我们创建了一个名为p1的结构体对象,并对name和age进行了初始化。由于height没有显式地进行初始化,因此它的值为默认值0.0f。然后我们又对height进行了单独的初始化。最后我们输出了结构体的成员变量的值。

 

结构体指针的使用

 

我们可以使用指针来访问结构体的成员变量和成员函数。下面是一个示例:

struct Person {
    string name;
    int age;
    float height;
};
 
int main() {
    // 通过指针访问结构体的成员变量和成员函数
    Person *ptr = &p1; // 将指针指向结构体对象p1
    ptr->display(); // 通过指针调用display()函数
    cout << "Age: " << ptr->age << endl; // 通过指针访问age成员变量
    return 0;
}

 

在上面的示例中,我们首先定义了一个名为Person的结构体类型,并在其中添加了一个名为display的成员函数。然后我们创建了一个名为p1的结构体对象,并通过指针ptr指向它。最后我们通过指针调用了结构体的成员函数和访问了成员变量的值。需要注意的是,在使用指针访问结构体的成员时需要使用箭头运算符->。

目录
相关文章
|
存储 Java 编译器
Java-关于main函数的修饰符(为什么要带public和static)
关于Java主函数的修饰符(为什么要带public和static) public修饰符 public是函数的权限,决定了该函数是否可以被外部的函数调用
|
存储 自然语言处理 关系型数据库
数据集成中的5个现代挑战以及CIO如何克服这些挑战
数据集成中的5个现代挑战以及CIO如何克服这些挑战
|
开发者
学习笔记 | 开发者社区运营: 工程师修炼的另一条路径
学习笔记 | 开发者社区运营: 工程师修炼的另一条路径
183 0
|
机器学习/深度学习 存储 分布式计算
|
Arthas Java 测试技术
Arthas ByteKit 深度解读(2):本地变量及参数绑定
### 前言 本文通过分析ByteKit的本地变量绑定(LocalVarsBinding)处理代码,结合Java Opcode手册、asm代码、javap反汇编字节码等工具,深入讲解每个指令的用法及在本场景的实际作用。结合上下文线索,从字节码的角度去理解ByteKit 本地变量绑定的实现过程。 相关文章: [Arthas ByteKit 深度解读(1):基本原理介绍](https:/
681 0
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~