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; }
相关推荐
轮到我狗叫了22 分钟前
栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历
java·算法·leetcode
Reese_Cool23 分钟前
【C++】从C语言到C++学习指南
c语言·c++·1024程序员节
小柯J桑_26 分钟前
C++:探索AVL树旋转的奥秘
开发语言·c++·avl树
数学人学c语言26 分钟前
从熟练Python到入门学习C++(record 6)
c++·python·学习
冰之杍1 小时前
Vscode进行Java开发环境搭建
java·ide·vscode
深情汤姆2 小时前
C++ 红黑树
数据结构·c++
skaiuijing2 小时前
Sparrow系列拓展篇:消息队列和互斥锁等IPC机制的设计
c语言·开发语言·算法·操作系统·arm
绵绵细雨中的乡音3 小时前
C++第28课-布隆过滤器的介绍
c++·哈希算法
Simulink_3 小时前
ROS学习笔记15——Xacro
linux·笔记·学习·机器人·ros
雯0609~3 小时前
c#:winform调用bartender实现打印(学习整理笔记)
开发语言·c#