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; }
相关推荐
我也有在努力4 分钟前
禁用 idea 屏幕阅读器功能 idea support screen readers
java·ide·intellij-idea
玖剹9 分钟前
穷举 VS 暴搜 VS 深搜 VS 回溯 VS 剪枝
c语言·c++·算法·深度优先·剪枝·深度优先遍历
雷工笔记12 分钟前
读书笔记|算法的破坏性影响
学习·随笔
毕设源码-钟学长12 分钟前
【开题答辩全过程】以 基于springboot的在线影院系统设为例,包含答辩的问题和答案
java·spring boot·后端
码上成长15 分钟前
<script setup> 实战模式:大型组件怎么拆?
开发语言·javascript·vue.js
xiezhr17 分钟前
Java开发中那些常见的坑,你踩过几个?
java·spring boot·spring
2301_7972673424 分钟前
神经网络组植物分类学习规划与本周进展综述15
人工智能·神经网络·学习
月下倩影时26 分钟前
视觉学习篇——理清机器学习:分类、流程与技术家族的关系
学习·机器学习·分类
yolo_guo27 分钟前
opencv 学习: QA_02 什么是图像中的高频成分和低频成分
linux·c++·opencv·计算机视觉
xiezhr29 分钟前
Java开发中最那些常见的坑,你踩过几个?
java·spring·springboot·后端开发