北大 C++ 3.7 this指针

this指针

C++程序到C程序的翻译

class Ccar{

       public:

              intprice;

              voidSetPrice(int p);

};

 

void Ccar::SetPrice(int p){

       price= p;

}

 

int main(){

       Ccarcar;

       car.SetPrice(20000);

return 0;

}

 

一开始没有C++编译器,C++àC,然后用C的编译器。

 

struct Ccar{

       intprice;

};

 

void SetPrice(struct Ccar *this, int p){this->price = p;}

 

int main(){

       structCcar car;

       SetPrice(&car,20000);

       return0;

}

 

this指针的作用

作用就是指向成员函数所作用的对象

非静态成员函数中可以直接使用this来代表指向该函数所作用的对象的指针。

例1

class Complex{

       public:

              doublereal,imag;

              voidPrint(){cout<<real<<”,”<<imag;}

              Complex(doubler, double i):real(r),imag(i){  }

              ComplexAddOne(){

                     //this指针就是指向AddOne所作用的对象。

                     this->real++;//等价于real++

                     this->Print();//等价于Print();

                     return*this;

              }

};

 

int main(){

       Complexc1(1,1),c2(0,0);

       c2= c1.AddOne();

       return0;

}

 

例2

class A{

       inti;

       public:

              voidHello{cout<<”hello”<<endl;}

//            -->假设用C语言来看(其实也可以用汇编或者机器码来理解)

//   voidHello(A *this){cout<<”hello”<<endl;}

//     而p->Hello();被翻译成Hello(p);

};

 

int main(){

       A*p = NULL;

       p->Hello();//这条语句干嘛呢?就是调用Hello并且作用于p指向的对象上面。

}

 

例3(错例)

class A{

       inti;

       public:

              voidHello(){cout<<i<<”hello”<<endl;}

// in C: void Hello(A *this){cout<<this->i<<”hello”<<endl;}

//所以程序会出问题。

};

int main(){

       A*p = NULL;

       p->Hello();

}

 

this指针和静态成员函数

l  静态成员函数中不能使用this指针!

l  因为静态成员函数并不具体作用于某个对象!

l  因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值