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 是普通对象