c++primer学习笔记--this指针以及const成员函数

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修饰的数据成员

猜你喜欢

转载自blog.csdn.net/pursue_my_life/article/details/80463300
今日推荐