成员变量和成员函数分开存储

发布时间 2023-04-13 01:59:57作者: boyboy!
  • 当创建 一个空对象,空对象也占有一个字节的空间,目的是为了区分空对象所占内存的位置

  • class person
    {}
    void text()
    person p;
    sizeof(p);
  • 非静态成员变量由类型所占的字节数有关,不属于类对象上

  • 静态成员变量是不属于类对象上

  • 静态成员函数不属于类对象上

this指针

  • this指针指向被调用的成员函数所属的对象

  • 每一个非静态成员都有this指针,无需书写

this指针的作用

class person
{
public:
person(int age)
{
this->age=age;//由this的定义指向的是p1.
}
int age;
}
void text()
{
person p1(15);
}
  • 可利用*this返回对象的本体,实现链式编程思想

  • 链式this的返回值是引用,引用直接返回对象。不返回引用则会复制一份数据,返回的不是原来的对象

空指针可以调用成员函数

  • 令对象为空

  • class person
    {
    public:
    void shouperson()
    {
    cout<<"校长"<<endl;
    }
    void shouperson02()
    {
    if(this==NULL)
    {
    return ;
    }
    cout<<m_age<<endl;//这里默认一个this->m_age;调用时this指向了空指针
    }
    int m_age;
    };
    void test()
    {
    person *p=NULL;
    }

const修饰成员函数

  • 常函数

  • 成员函数后加入const

  • 成员函数属性的声明前加入关键字mutable后,常函数中依然可以修改

    • //在类中
      class person
      {
      public:
      void shouperson()const
      {
      this->m_a=100;//const下的this的指向不可以改变,属于指针常量。
      }
      }
    • class person
      {
      public:
      int m_age;
      mutable int m_b;
      }
  • 常对象

  • 声明对象前加入const称该对象为常对象,也是不可以属性也是不可以修改的。

  • 常对象只能调用常函数,就是都加const

         class person
      { public:
      void person(int age)const
      {
      m_age=age;
      }
      int m_age;
      };
      int main()
      {
        const person p(10);//常对象
      }
  •