欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++学习笔记6:this指针

程序员文章站 2022-07-12 15:38:41
...

1 c++程序到c程序的翻译

//
// 演示C++程序到C程序翻译
//
class CCar{
public:
    int price;
    void SetPrice(int p);
};

void CCar::SetPrice(int p) {
    price = p;
}

int main()
{
    CCar car;
    car.SetPrice(20000);
    return 0;
}
//
// 演示C++程序到C程序翻译
//

#include <iostream>

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

int main(){
    struct CCar car;
    SetPrice(&car, 20000);
    return 0;
}

2 this指针作用:指向成员函数所作用的对象
3 非静态成员函数中可以直接用this来代表指向该函数作用的对象的指针(见本工程thiszhizhen.cpp)

//
// this指针例子
//
#include <iostream>

using namespace std;


class Complex{
public:
    double real, imag;
    void Print(){
        cout << real << "," << imag << endl;
    }
    // 构造函数后面跟了初始化列表,可以吧real初始化为r,imag初始化成i
    Complex(double r, double i):real(r),imag(i){}
    // 成员函数
    Complex AddOne()
    {
        // this指针指向addOne成员函数所作用的那个对象
        this->real ++;  // 等价于 real++
        this->Print();  // 等价于Print
        return *this;   // 返回addOne所作用的这个对象,必须使用到this指针,this指向addOne所作用的对象,*this等价于addOne所作用的那个对象
    }
};

4 this指针作用:
eg:

class A{
    int i;
    public:
    void Hello(){
            cout << "hello" << endl;
       }
	// 编译器编译之后成员函数如下
    void Hello(A* this){cout << "hello" << endl;}
    	
	// 会报错的写法
    void Hello(){cout << i << "hello" << endl;}
    // 编译器翻译之后 this是个空指针,所以this->i是错误的
    void Hello(A* this){cout << this->i << "hello" << endl;}
};
int main(){
	A* p = NULL;    // 定义空指针 p没有指向任何对象
	p->Hello(); // 空指针去调用Hello(),让Hello作用在p所指向的那个对象上面,实际运行程序不会出错
}
    // p->Hello() 被编译器翻译之后如下   Hello(p);

5 this指针和静态成员函数
静态成员函数中不能使用this指针!因为静态成员函数并不具体作用于某个对象!因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!

相关标签: C++

上一篇: 接口与事件

下一篇: 整理知识点