C++--类与对象(上)--结构体的内存对齐--this指针

短命女 2022-11-05 00:43 58阅读 0赞

类与对象上

    • 结构体的内存对齐
  • this指针
    • this指针的特性

结构体的内存对齐

对于内存对齐这里的讲解,其实在C++中的和在C语言中的是一样的,我直接将以前的连接粘贴过去,大家注意理解就行了链接: 点击此处

this指针

this 类型: 类类型*const this
这里的this 指针是一个相对于隐藏的指针,它在成员函数中时实际存在的,

下面这个是一个简单的日期类代码,包含了两个成员函数和内部的元素,其实在成员函数中每一个都有着对应的this指针,只不过被隐藏起来的,从外部是无法看见的.就像我下面代码中给出的注释一样!
因为这里的是编译器自主完成的,所以我们只需要明白其中的原理,就可以了!

  1. class Date
  2. {
  3. public:
  4. void Display() //void Display (this) 这里的this 指针在成员函数中是一个形参,使用之后会进行销毁
  5. {
  6. cout << _year << "-" << _month << "-" << _day << endl;
  7. D d;
  8. //this = &d; //因为这里的this指针是一个const 类型的数据,他所指的数据是无法改变的
  9. }
  10. void SetDate(int year, int month, int day) //void SetDate( this ,int year, int month, int day)
  11. {
  12. this->_year = year; //!!!!就如同这一句写的一样,这里的其实就是一个this指针的指向,只不过是被隐藏起来的,从外部是看不见的
  13. _month = month; //像下面这里的也可以是this->_month=month;
  14. _day = day;
  15. }
  16. private:
  17. int _year; // 年
  18. int _month; // 月
  19. int _day; // 日
  20. };
  21. void test() { //这里是一个对类进行简单的调用
  22. Date d1, d2;
  23. d1.SetDate(2018, 5, 1);
  24. d2.SetDate(2018, 7, 1);
  25. d1.Display();
  26. d2.Display();
  27. //外面无法进行访问
  28. //cout << this << endl;
  29. }

this指针的特性

1.this指针的类型:类类型* const

2 this 指针只可以在成员函数内部进行使用,因为在成员函数使用完毕后就会被释放.如下:

  1. class Date
  2. {
  3. public:
  4. //成员函数
  5. void Display() //void Display (this)
  6. //这里的this 指针在成员函数中是一个形参,使用之后会进行销毁
  7. {
  8. //成员函数
  9. void SetDate(int year, int month, int day)
  10. //void SetDate( this ,int year, int month, int day)
  11. { }

3.this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针

4 this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

5.每一个非静态的成员函数中都存在这一个this指针

6.this指针从外部是无法进行访问的

7.空指针无法进行解引用的操作

8.this指针i没有进行解引用的操作下可以进行解引用

这就是对于类与对象的以部分基础内容,只要大家认真看,多敲代码,就能会的!!!

发表评论

表情:
评论列表 (有 0 条评论,58人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++结构字节对齐

    前言 在计算机中数据存储和传输以位(bit)为单位,每8个位bit组成1个字节(Byte)。32位计算机的字长为32位,即4个字节;对应的,64位计算机的字长为64位,