this指针——指向类对象的指针
#include <iostream> using namespace std; class bitch { private: static int service;//静态成员函数 int baby; //非静态成员函数 public: void show_baby() { cout << baby << endl; } void service_start() { cout << service << endl; } }; int main() { bitch Joe, Bob, Steven; }
当你调用函数的时候,
你为会是这样的 eg: Joe.eat_apple();
实际上,会传进去一个this指针
是这样的 Joe.eat_apple( &Joe );
为什么呢?
因为 bitch 类 在编译后,内存中会有唯一的一个地址。
bitch可以创造很多个对象,但是类的地址还是唯一的。
类就像是一个婊子, 可以被很多的对象上( 通过生子来骗取钱财), 婊子生了3个孩子,不知道哪个孩子(非静态数据成员)是哪个对象的。为顺利骗钱, 类婊子 在被上的同时,隐式的获取了这些对象的地址, 这个地址就通过 this 指针保存起来。
this指针,就是指向这些 对象, 存的就是这些对象的地址。 且this并不属于这个对象。
婊子通过 this 来辨别 孩子(非静态数据成员)是谁的, 然后去勒索钱财 。
标准定义:
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。
静态数据成员
孩子属于每个对象,每个对象的孩子都不同。
但是 service 是每个对象都可以享受的。 类婊子 的service是唯一,共享的。
这中servie 被我们称为 静态数据成员。
表示为 static ....
这里仅仅简单的表示下概念,静态函数与类的具体,我会在之后补上链接:
const成员函数
作用: 用来修改 隐式this指针的类型 ——> 分类的细化可以减少出错率
首先,形式很奇怪 eg:
void show_baby() const;
1)这个函数只能调用 常数据成员,常成员函数。
2)常成员函数可以用来 函数重载的区分
this为顶层 const, 即 指针为常量,指向不为常
而const的this为 const T *const this
mutable
给类的非静态数据成员 的声明前加上 mutable ——> 即使在const函数中也能改变 被mutable修饰的数据成员