Struct
成员函数
成员函数就是写在 struct/class 里面的函数,并且属于这个对象本身。
换句话说:
- 普通函数不属于任何对象
- 成员函数属于某个类/结构体
- 成员函数可以直接访问对象的成员变量(a、b、c)
普通函数(不属于任何对象)
int add(int x, int y) {
return x + y;
}
这个函数不是任何对象的,它在全局空间。
📍 成员函数(属于某个对象)
struct Node {
int a, b;
int sum() { // ← 这是成员函数
return a + b; // 直接访问该对象的 a 和 b
}
};
假设你写:
Node x;
x.a = 3;
x.b = 5;
cout << x.sum(); // 输出 8
这里:
x.sum()就是 成员函数调用- sum() 属于 Node 这个结构体
- sum() 内部可以直接用
a和b
🧩 成员函数的隐藏参数 this
每个成员函数都有一个隐藏参数:
this → 指向当前对象的指针
所以当你写:
x.sum();
实际上是:
sum(&x);
这就是为什么成员函数可以访问 a、b,因为会编译成:
this->a
this->b
⭐ 再看你的运算符重载
你写的:
bool operator<(const node &B) const {
if (a == B.a) return b > B.b;
return a > B.a;
}
这是一个成员函数,等价于:
bool operator<(const node *this, const node &B)
对应调用:
x < y
实际是:
x.operator<(y)
🔥 成员函数的主要特点总结
| 特点 | 解释 |
|---|---|
| 属于某个类/struct | 在 class/struct 内部定义 |
| 隐式参数 this | 自动指向当前对象 |
| 可以直接访问成员变量 | 不需要对象名 |
用 对象.函数() 调用 |
如 x.sum(), a.operator<(b) |
📌 非成员函数 vs 成员函数对比
| 类型 | 写法 | 调用方式 | 能否访问成员变量 |
|---|---|---|---|
| 成员函数 | 写在 struct 里 | x.fun() |
✔ 可以直接访问 |
| 非成员函数 | 写在外面 | fun(x) |
✘ 不能直接访问(除非 friend) |
⭐ 最终一句话总结
成员函数就是属于对象的函数,可以直接访问该对象的数据(成员变量),并通过 this 指针运行。
如果你愿意,我可以再给你讲:
- 什么是
static成员函数? - 什么是 this 指针?
- 为什么 operator<< 必须是非成员函数?
随时问!
重载运算符
struct Node {
int x,y;
bool operator < (const Node & other) const {
if(x != other.x) return x < other.x;
return y < other.y;
}
};
如果用非成员函数写是这样子的:
bool operator<(const node &A, const node &B) {
return A.a < B.a;
}
const node &B 的含义?
bool operator<(const node &B) const
重点就是参数里的:
const node &B
⭐ 一句话解释
传入一个 “只读的 node 引用” 作为比较对象。
⭐ 逐部分拆解解释
① node
表示参数类型是一个 node 结构体。
也就是用来和 this 当前对象比较的另一个结构体。
例如:
a < b; // 左边是 this,右边是 B
左边对象调用成员函数,右边对象当作参数传进来。
② & —— 引用(reference)
不复制对象,直接引用原来的对象。
- 节省时间(不复制大结构体)
- 节省内存
- 性能更高
若不这样做,每次比较都会 复制一个 B,效率非常低。
③ const —— 只读,不允许修改 B
含义:
保证函数内部不会修改 B 的内容。
例如:
B.a = 10; // ❌ 不允许
为什么这样好?
- 操作
<时本来就不应该修改比较对象 - 更安全
- 编译器可做优化
- 保证
<是纯函数(pure),严格弱序才能用于 map / set / sort
如果去掉 const:
bool operator<(node &B); // 没有 const
那你在比较时可以修改 B,会破坏排序逻辑,并且不能用于 set/map。
⭐ 总结
| 部分 | 解释 |
|---|---|
| node | 参数类型是结构体 |
| & | 引用传递,不复制对象,性能高 |
| const | 不能修改 B,更安全、更规范 |
组合成:
const node &B
就是:
传入一个不能被修改的结构体引用,用来和当前对象比较。

浙公网安备 33010602011771号