(C++)结构体struct

目录

一、基本介绍

class和struct

相同点

不同点

二、基本操作

1.定义struct

2.创建struct实例

3.访问成员

4.使用构造函数(C++11 及更高版本)

5.结构体数组

6.结构体作为函数参数

7.结构体作为函数返回值

8.指向结构体的指针

三、项目实例


一、基本介绍

        结构体在C++中存在的唯一意义就是为了希望与C保持向后兼容性,因为C没有class(类)但是有结构体,如果突然的去除结构体会失去两者的兼容性,C++的编译器无法识别struct。因此类中有的函数和操作同样是可以用于struct,但是两者还是有一些不同的。

class和struct

相同点

1.成员变量和成员函数:struct 和 class 都可以包含成员变量和成员函数。

2.构造函数和析构函数:两者都可以有构造函数和析构函数。

3.继承:struct 和 class 都可以被继承,也可以作为基类。

4.实例化:无论是 struct 还是 class,都可以被用来创建对象。

5.访问控制:struct 和 class 都支持三种访问控制级别:public、protected 和 private。

6.成员函数的特性:两者的成员函数都可以是虚函数,从而支持多态。

7.模板使用:struct 和 class 都可以被用作模板参数。

但是我们一般是不会使用struct去进行继承或者其他比较复杂的操作。基本就是C中的使用方法,但是在初始化的时候会使用class的方法。

不同点

默认访问权限:

在 class 中,默认的成员访问权限和继承类型是 private。
在 struct 中,默认的成员访问权限和继承类型是 public。

二、基本操作

1.定义struct

struct MyStruct {
    int myInt;
    double myDouble;
    std::string myString;
};

2.创建struct实例

MyStruct s;

3.访问成员

s.myInt = 10;
s.myDouble = 3.14;
s.myString = "Hello";

4.使用构造函数(C++11 及更高版本)

在 C++11 及更高版本中,可以在 struct 内部定义构造函数来初始化成员:

struct MyStruct {
    MyStruct(int x, double y, std::string z) : myInt(x), myDouble(y), myString(z) {}

    int myInt;
    double myDouble;
    std::string myString;
};

MyStruct s(10, 3.14, "Hello");

5.结构体数组

MyStruct arrayOfStructs[5];

6.结构体作为函数参数

void printStruct(const MyStruct& s) {
    std::cout << s.myInt << ", " << s.myDouble << ", " << s.myString << std::endl;
}

printStruct(s);

7.结构体作为函数返回值

MyStruct createStruct() {
    MyStruct s;
    s.myInt = 1;
    s.myDouble = 2.2;
    s.myString = "Struct";
    return s;
}

MyStruct newStruct = createStruct();

8.指向结构体的指针

MyStruct* ptr = &s;
ptr->myInt = 20;

三、项目实例

让我们通过一个具体的项目示例来展示如何在实践中使用 struct。假设我们要创建一个简单的图书管理系统,其中涉及图书的信息记录和处理。这个系统将使用 struct 来存储和操作图书信息。

#include <iostream>
#include <string>

// 定义图书信息的结构体
struct Book {
    std::string title;      // 书名
    std::string author;     // 作者
    int yearPublished;      // 出版年份

    // 构造函数
    Book(const std::string& t, const std::string& a, int y) : title(t), author(a), yearPublished(y) {}
};

// 函数:打印一本书的信息
void printBookInfo(const Book& book) {
    std::cout << "Title: " << book.title
              << ", Author: " << book.author
              << ", Year: " << book.yearPublished << std::endl;
}

int main() {
    // 使用构造函数创建书籍实例
    Book book1("The Great Gatsby", "F. Scott Fitzgerald", 1925);
    Book book2("1984", "George Orwell", 1949);
    Book book3("To Kill a Mockingbird", "Harper Lee", 1960);

    // 使用数组来存储多本书籍
    Book library[3] = {book1, book2, book3};

    // 打印书籍信息
    printBookInfo(book1);
    printBookInfo(book2);
    printBookInfo(book3);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值