这是她 发表于 2020-5-12 18:14:39

C++旅程第六站------this指针

本帖最后由 这是她 于 2020-5-12 18:14 编辑

Little by little,one travels far.      

         this指针-------指向被调用的成员函数所属对象
          1、this指针是隐含每一个非静态成员函数内的一种指针;
          2、this指针不需要定义,直接使用即可;

         this指针的用途:
      1、当形参和成员变量同名时,可用this指针来区分;
      2、在类的非静态成员函数中返回对象本身,可用return *this;
#include<iostream>

using namespace std;

class Meat
{
      public:
                int price;
               
                Meat(int price)
                {
                        //当形参和成员变量同名时,可用this指针来区分;
                        this->price = price;
                }
               
                Meat& MeatAddprice(Meat r)
                {
                        this->price += r.price;
                        //返回对象本身
                        return *this;
                }
};

int main()
{
      Meat pork(45);
      cout << "The price of pork : " << pork.price << endl;
      
      Meat beef(56);
      beef.MeatAddprice(pork);
      beef.MeatAddprice(pork).MeatAddprice(pork).MeatAddprice(pork).MeatAddprice(pork);//如果希望这条语句可以顺利运行,那么这个成员函数的返回值类型应该是对象,所以嘞,我们在这返回引用,而不是返回一个值
      cout << "The price of beef is : " << beef.price << endl;
      
      return 0;
}
         const修饰成员函数

         常函数:
         1、成员函数后加const----该成员函数->常函数;
         2、常函数内不可以修改成员属性;
         3、成员属性声明时加关键字mutable-----在常函数中依然可以修改;

      常对象:
      1、声明对象前加const----该对象->常对象;
      2、常对象只能调用常函数;
#include<iostream>

using namespace std;

class Meat
{
        public:
                int m_price;
                int m_mass;
                mutable int m_size; //加入mutable关键字,即使在常函数中也可以修改他的值
               
                Meat(int price,int mass)
                {
                        this->m_price = price;
                        this->m_mass = mass;
                }
               
                //this指针的本质--指针常量,指针的指向是不可以修改的
                //在成员函数后面加const,修饰的是this的指向,让指针指向的值也不可以修改
                void showmass(int mass) const
                {
                        this->m_size = 888;//这个语句是可以执行的
                        this->m_mass = 999;//如果成员函数没有const,这条语句是可以执行的;加入const以后,指针指向的值是不可以修改的
                        this->m_mass = NULL;//this指针是不可以修改指针的指向的
                        cout << "Eating meat!!!!!!" << endl;
                }
               
                void showprice()
                {
                        //防止空指针
                        if(this == NULL)
                        {
                                return;
                        }
                       
                        cout << "price : " << this->m_price << endl;
                }
               
};

int main()
{
        Meat *pork = NULL;
        pork->showmass(555);
        //pork->showprice();//传入空指针会出错
       
        const Meat beef(1,1);//在对象前面加入const,变成常对象
        beef.m_price = 666;//不可以修改
        beef.m_size = 333;//可以修改
       
        //常对象只能调用常函数
        beef.showmass(555);//√
        beef.showprice(222,111); //×常对象不可以调用普通成员函数,因为普通成员函数可以修改属性
       
       
        return 0;
}
                                       渣渣等待大佬赐教{:10_254:}



页: [1]
查看完整版本: C++旅程第六站------this指针