C++(2) 结构体和动态数组的实现

文章目录

      • [C++ 结构体和动态数组的实现](#C++ 结构体和动态数组的实现)
        • [1. 结构体增强](#1. 结构体增强)
        • [1.1 C++ 结构体语法特征](#1.1 C++ 结构体语法特征)
        • [1.2 C++ 结构体案例](#1.2 C++ 结构体案例)
        • [2. 动态数组实现](#2. 动态数组实现)
          • [2.1 功能概述](#2.1 功能概述)
          • [2.2 设计整个结构体的基本情况](#2.2 设计整个结构体的基本情况)
          • [2.3 学生相关数据设计](#2.3 学生相关数据设计)

C++ 结构体和动态数组的实现

1. 结构体增强
1.1 C++ 结构体语法特征
c++ 复制代码
#include <iostream>

using namespace std;

struct Student
{
    int id;
    char name[16];
    int age;

    // C++ 支持结构体声明函数,可以认为当前函数属于当前结构体
    void test()
    {
        cout << "测试" << endl;
    }
};

/*
C++ 中结构体的数据类型是 struct 关键字之后的名称
通常情况下按照大驼峰命名法规则
*/
int main(int argc, char const *argv[])
{
    /*
    直接可以利用结构体 struct 关键字之后的名称
    作为数据类型名称
    */
    Student stu = {1, "James", 16};

    cout << "ID : " << stu.id << endl;
    cout << "Name : " << stu.name << endl;
    cout << "Age : " << stu.age << endl;

    // 结构体声明实现的函数,通过结构体变量或者结构体指针调用
    stu.test();

    return 0;
}
1.2 C++ 结构体案例
c++ 复制代码
#include <iostream>
// 相当于引入了一个 <string> C 语言头文件,推荐使用 <cstring>
#include <cstring>
// cstdlib 相当于导入 stdilb.h
#include <cstdlib>

using namespace std;

struct Student
{
    int id;
    char name[32];
    int age;

    void set_id(int id);
    int get_id();

    void set_name(char *name);
    char *get_name();

    void set_age(int age);
    int get_age();
};

/*
外部实现结构体声明函数,需要使用作用域运算符
明确当前函数的归属是哪一个结构体
    void Student::set_id(int id) 实现结构体 Student 的函数 
*/
void Student::set_id(int id)
{
    /*
    this->id 明确告知编译器,当前操作的 id 
    是当前调用函数结构体变量/指针的成员变量 id
    而不是参数变量 id
    */
    this->id = id;
}
int Student::get_id()
{
    return id;
}

void Student::set_name(char *name)
{
    strcpy(this->name, name);
}
char *Student::get_name()
{
    return name;
}

void Student::set_age(int age)
{
    this->age = age;
}
int Student::get_age()
{
    return age;
}

int main(int argc, char const *argv[])
{
    /*
    通过结构体指针操作结构体中的函数
    利用 set 相关函数,给予当前结构体数据进行赋值操作

    stu->set_id = 10;
    */
    Student *stu = (Student *)calloc(1, sizeof(Student));

    stu->set_id(10);
    stu->set_name("James");
    stu->set_age(16);

    cout << "ID : " << stu->get_id() << endl;
    cout << "Name : " << stu->get_name() << endl;
    cout << "Age : " << stu->get_age() << endl;

    free(stu);
    stu = NULL;

    return 0;
}
2. 动态数组实现
2.1 功能概述

整体结构为结构体,内存使用指定数据类型,针对于当前指定类型,完成对应的【增删改查】操作

2.2 设计整个结构体的基本情况

考虑到数组操作中,容量问题较为复杂。可以在结构体中设计对应的数据,将容量和有效元素个数进行保存

c++ 复制代码
#define DEFAULT_CAPACITY 10

struct MyArray
{
    // 存储 Student * 指针数据数组,默认容量为 10
    Student ** arr = new Student*[DEFAULT_CAPACITY];
    // 整个底层数组的容量
    int capacity = DEFAULT_CAPACITY;
    // 当前数组中存储的有效元素个数
    int size;
}
2.3 学生相关数据设计

student.h 头文件

c++ 复制代码
#ifndef _STUDENT_H_
#define _STUDENT_H_

#include <iostream>

using namespace std;

struct Student
{
    int id;
    string name;
    int age;

    void setId(int id);
    int getId();

    void setName(string name);
    string getName();

    void setAge(int age);
    int getAge();
};

#endif

student.cpp C++ 文件

c++ 复制代码
#include "student.h"

void Student::setId(int id) { this->id = id; }
int Student::getId() { return id; }

void Student::setName(string name) { this->name = name; }
string Student::getName() { return name; }

void Student::setAge(int age) { this->age = age; }
int Student::getAge() { return age; }
相关推荐
Dfreedom.1 分钟前
在Windows上搭建GPU版本PyTorch运行环境的详细步骤
c++·人工智能·pytorch·python·深度学习
我命由我123452 分钟前
Excel 表格 - Excel 减少干扰、专注于内容的查看方式
学习·ui·excel·photoshop·表格·ps·美工
我命由我123453 分钟前
Excel 表格 - Excel 单元格添加边框
学习·ui·excel·课程设计·photoshop·ps·美工
爱读源码的大都督4 分钟前
挑战一下,用Java手写Transformer,先手写QKV,能成功吗?
java·后端·程序员
华仔啊6 分钟前
面试官灵魂拷问:count(1)、count(*)、count(列)到底差在哪?MySQL 性能翻车现场
java·后端
用户0332126663679 分钟前
在Word 中插入页眉页脚:实用 Java 指南
java
奔跑吧邓邓子10 分钟前
【Java实战㊱】Spring Boot邂逅Redis:缓存加速的奇妙之旅
java·spring boot·redis·缓存·实战
杨杨杨大侠12 分钟前
Atlas-Event:高性能事件处理与监控系统
java·github·eventbus
杨杨杨大侠15 分钟前
Atlas Event:解锁事件驱动的潜能
java·github·eventbus
ForteScarlet18 分钟前
Kotlin 2.2.20 现已发布!下个版本的特性抢先看!
android·开发语言·kotlin·jetbrains