C++中的结构体

  1. 结构体作用
    结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成你想要的数据类型。以方便日后的使用。
    在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
    结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

  2. 结构体
    在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private。

  3. C++控制台输出例子:

    #include <cstdlib>
    #include <iostream>
    //定义结构体
    struct point
    {
    //包含两个变量成员
    int x;
    int y;
    };
    using namespace std;
    int main(intargc,char*argv[])
    {
    pointpt;
    //加上struct的结构体变量定义是C语言的特征,而C++语言不需要这样
    pt.x=1;
    pt.y=2;
    cout<<pt.x<<endl<<pt.y<<endl;
    return EXIT_SUCCESS;
    }
    
  4. 类与结构体在C++中有三点区别:
    (1)class中默认的成员访问权限是private的,而struct中则是public的。
    (2)从class继承默认是private继承,而从struct继承默认是public继承。
    (3)C++的结构体声明不必有struct关键字,而C语言的结构体声明必须带有关键字(使用typedef别名定义除外)。

### C++结构体定义与使用 #### 结构体的基础概念 在 C++ 中,`struct` 是一种复合数据类型,允许开发者将不同类型的数据组合在一起形成一个新的整体。通过这种方式,可以更方便地管理复杂的数据集合。 C++ 的 `struct` 和 C 语言中的 `struct` 存在一个重要区别:在 C++ 中,当定义一个结构体时,它实际上是一个全新的自定义类型[^2]。因此,在声明变量时无需再显式指定 `struct` 关键字即可直接使用该类型的名称。 #### 定义结构体 以下是定义结构体的一般形式: ```cpp struct 名称 { 类型 成员名; }; ``` 例如,下面定义了一个名为 `Person` 的结构体,用于存储人的姓名和年龄: ```cpp struct Person { std::string name; // 字符串类型成员表示名字 int age; // 整数类型成员表示年龄 }; ``` #### 创建结构体实例 一旦定义结构体,就可以像其他基本类型一样创建其对象并初始化它们。以下是一些常见的方法: 1. **默认方式** ```cpp struct Person p1; ``` 2. **带初始值的方式** ```cpp struct Person p2 = {"Alice", 30}; // 初始化成员 ``` 3. **使用构造函数(如果支持)** 如果启用了现代 C++ 特性,则可以通过构造函数简化初始化过程: ```cpp struct Person { std::string name; int age; // 构造函数 Person(std::string n, int a) : name(n), age(a) {} }; Person p3("Bob", 25); // 调用构造函数 ``` #### 访问结构体成员 要访问结构体内的某个成员,可以使用点运算符 (`.`),如下所示: ```cpp std::cout << "Name: " << p2.name << ", Age: " << p2.age << std::endl; ``` #### 结构体数组 类似于普通数组,也可以创建由多个相同结构体组成的数组。例如: ```cpp struct Person people[3]; // 数组大小为3 people[0].name = "Charlie"; people[0].age = 40; ``` #### 结构体指针 指向结构体的指针同样可以用作操作工具。此时需改用箭头运算符 (`->`) 来间接访问成员: ```cpp struct Person *pPtr = &p2; std::cout << "Pointer Name: " << pPtr->name << ", Pointer Age: " << pPtr->age << std::endl; ``` #### 嵌套结构体 可以在另一个结构体内嵌入额外的结构体作为子组件。这有助于构建层次化的数据模型。 ```cpp struct Address { std::string city; std::string street; }; struct Employee { std::string name; int id; Address addr; // 嵌套地址结构体 }; Employee emp; emp.addr.city = "New York"; // 设置城市字段 ``` #### 将结构体传递给函数 既可以按值传递整个结构体副本到函数中,也能仅传引用以减少开销。后者通常推荐用于大型或频繁修改的对象上。 ```cpp void display(const Person& person) { // 参考版本避免复制成本 std::cout << "Function Call - Name: " << person.name << ", Age: " << person.age << std::endl; } display(p2); ``` #### 使用常量修饰符 (const) 为了保护某些特定部分不被外部更改,可利用 `const` 进行限定。比如只读属性或者固定配置项等情形下非常有用。 ```cpp struct Config { const double pi = 3.14159265358979323846; // 不变圆周率数值 }; Config cfg; //cfg.pi = 2.718; // 错误尝试重新赋值会引发编译错误 ``` 以上就是关于 C++ 中如何定义及运用结构体的一些核心知识点概述[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值