This 指標和const 修飾This指標
阿新 • • 發佈:2019-01-10
一、This指標
每個物件都維護自己的一份資料,而成員函式定義是所有物件共享的。
以下兩段程式是c++編譯器對普通成員函式的內部處理
This指標是一個常量,含有當前實施呼叫的物件的地址
class Test { public: Test (int i) { mI = i; } int getI() { return mI; } static void Print() { printf("This is class Test.\n"); } protected: private: int mI; }; Test a(10); a.getI(); Test::Print();
void Test_initilize(Test* pThis,int i)
{
pThis->mI = i;
}
int Test_getI(Test* pThis)
{
return pThis->mI;
}
void Test_Print()
{
printf("This is class Test.\n");
}
Test a;
Test_initilize(&a,10);
Test_getI(&a);
Test_Print();
問題??
呼叫成員函式時,如何知道是對那個物件進行資料操作呢
每個成員函式都有一個隱含的引數,指向接收訊息的物件 稱為 This指標
This的作用:
(1) 用來區分與區域性變數重名的資料成員
(2)返回當前物件
(3) 返回當前物件的地址
沒學This指標的時候需要這樣
class
{
public:
int getA(int _a,int _b)
{
a = _a;
b = _b;
}
protected:
private:
int a;
int b;
};
使用This指標是:
class { public: int getA(int a,int b ) { this->a = a; this->b = b; } protected: private: int a; int b; };
class X
{
int m;
public:
void setVal(int m)
{
this->m = m;//區分與函式引數重名的資料成員
}
X& add(const X& a)
{
m += a.m;
return *this;//返回當前物件
}
void copy(const X& a)
{
if(this == &a)
{
return;
m = a.m;//拷貝操作
}
}
protected:
private:
};
#include<iostream>
using namespace std;
class Test
{
public:
Test(int a,int b)//實質是Test(Test *this,int a,int b)
{
this->a = a;
this->b = b;
}
void printT()
{
cout<<"a:"<<a<<endl;
cout<<"b:"<<this->b<<endl;
}
//1 const 寫在什麼位置 沒有關係
//2 const 修飾的是誰?
//3 const 修飾的是形參 a 嗎?--不是
//4 const 修飾的是屬性 this-a this-b?--不是
//實質是:void OpVar(const Test *this int a,int b)
//void OpVar(const Test *const this int a,int b) 更精確的寫法
//const 修飾的是this指標,指標指向的記憶體的空間不能修改
void OpVar(int a,int b) const//一般寫在後邊
{
a = 100;
this->a = 100;
this->a = 100;
//cout<<"a:"<<a<<endl;
cout<<"b:"<<this->b<<endl;
}
protected:
private:
int a;
int b;
};
int main()
{
Test t1(1,2);
t1.printT();//實質是printT(&t1)
system("pause");
return 0;
}