当前位置: 首页 > news >正文

9-类、结构体、指针、引用

1- 类

可以将变量、数组和函数完美地打包在一起。类中的变量和函数被统一称为类的成员变量。

#include <iostream>
#include <string>

// 定义 Person 类
class Person {
	private:
	    std::string name; // 姓名
	    int age;          // 年龄
	
	public:
	    // 构造函数
	    Person(std::string n, int a) : name(n), age(a) {}
	
	    // 成员函数:打印信息
	    void display() {
	        std::cout << "姓名: " << name << ", 年龄: " << age << "\n";
	    }
};

int main() {
    // 创建 Person 对象
    Person p("张三", 25);
    p.display(); // 调用成员函数
    
    return 0;
}

2-结构体

结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public。

#include <iostream>
#include <string>

// 定义结构体 Student
struct Student {
    std::string name; // 姓名
    int age;          // 年龄
    double score;     // 分数

    // 构造函数(C++ 允许结构体包含构造函数)
    Student(std::string n, int a, double s) : name(n), age(a), score(s) {}

    // 成员函数:显示学生信息
    void display() {
        std::cout << "姓名: " << name << ", 年龄: " << age << ", 分数: " << score << "\n";
    }
};

int main() {
    // 创建 Student 结构体对象
    Student stu("张三", 20, 88.5);
    stu.display(); // 调用成员函数
    
    return 0;
}

3-指针

指针指向存放变量的值的地址。因此我们可以通过指针来修改变量的值。

指针的定义

//数据类型* 指针变量名;

int* p; // p是一个指向int类型的指针
double* q; // q是一个指向double类型的指针

指针的基本操作

1

//获取变量地址&
int a = 10;
int* p = &a; // p存储的是变量a的地址

2

//访问指针指向的值*(解引用运算符)
cout << *p; // 输出a的值 10

3

//指针可以更改指向的地址
int a = 10, b = 20;
int* p = &a; // p指向a
p = &b;      // p现在指向b

//使用指针修改变量的值
*p = 30; // 修改b的值为30

4

//数组名是一个指向数组首元素的指针
int arr[] = {1, 2, 3};
int* p = arr; // p指向数组的第一个元素
cout << *(p + 1); // 输出2

5

//使用 new 分配动态内存
int* p = new int(42); // 在堆区分配一个整数,值为42
delete p; // 释放内存

//数组的动态分配
int* arr = new int[5]; // 分配5个int的数组
delete[] arr; // 释放数组

6

//空指针表示指针不指向任何有效地址
int* p = nullptr;

7

//指针支持加减运算
int arr[] = {10, 20, 30};
int* p = arr;
p++; // 指向数组的下一个元素

8

//常量指针(指针指向的值不能修改)
const int* p = &a;
 *p = 20; // 错误,不能修改p指向的值
//指针常量(指针本身不能改变指向的地址)
int* const p = &a;
p = &b; // 错误,不能修改p的指向

4-引用

C++ 中的 引用(Reference) 是变量的别名,它提供了一种在不使用指针的情况下,直接访问原变量的方法。

引用的定义

//数据类型 &引用名 = 原变量;
int a = 10;
int &b = a;  // b 是 a 的引用,引用 b 只是 a 的别名,它们指向相同的内存地址。
b = 20;      // 现在 a 也变成了 20
int x;
int &y;  // ❌ 错误!引用必须在定义时初始化
//引用一旦绑定,就不能更改
int a = 10, b = 20;
int &ref = a;
ref = b;   // 只是修改 a 的值,并不会让 ref 变为 b 的引用

在这里插入图片描述

5-链表

链表是一种动态数据结构,由一系列节点(Node)组成,每个节点包含数据和指向下一个节点的指针。

#include <iostream>
using namespace std;

struct Node {
    int data;      // 数据
    Node* next;    // 指向下一个节点的指针
};

-> 是 C/C++ 语言中的箭头运算符,用于访问指针指向的结构体(struct)或类(class)的成员。

//使用 -> 当变量是一个指针时
p->成员  // p 是指针

//使用 . 当变量是普通对象时
obj.成员  // obj 是普通对象

相关文章:

  • 挖矿病毒应急响应处置手册
  • 嵌入式Linux——Framebuffer应用编程
  • Milvus学习整理
  • 我在windows上创建一个空文件,这个文件在哪里存着?这个文件要不要占据磁盘空间大小?
  • JVM常见面试总结
  • PostgreSQL_数据下载并保存(psycopg2)
  • w265基于Spring Boot库存管理系统
  • Saga 模式实战 Demo
  • 人工智能:企业RAG方案
  • Java面试黄金宝典8
  • 算法1--两束求和
  • 【电源专题】锂电池保护IC/锂电池电压监测IC/锂电池电量计IC/锂电池充电控制IC常见封装一览表
  • MySQL连接较慢原因分析及解决措施
  • 基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法
  • 卷积神经网络 - 梯度和反向传播算法
  • 六十天前端强化训练之第二十五天之组件生命周期大师级详解(Vue3 Composition API 版)
  • 2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维
  • spring.datasource.filters = stat,wall配置解释
  • 深入解析 Java Stream API:从 List 到 Map 的优雅转换!!!
  • 计算机基础:编码03,根据十进制数,求其原码
  • 聚焦智能浪潮下的创业突围,“青年草坪创新创业湃对”走进北杨人工智能小镇
  • 调查:“网约摩的”上线起步价五六元,合规性及安全性引质疑
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开无条件谈判
  • 广西桂林、百色、河池等地表态:全力配合中央对蓝天立的审查调查
  • 以色列媒体:哈马斯愿意释放部分人员换取两个月停火
  • 下周或迎外贸“抢出口”高峰,跨境电商敏感货物如何便利化“登机”?