C++程式演示類中this關鍵字的使用
C++ 中的 ‘this’ 關鍵字非常重要,它在多種使用場景中都有應用。‘this’ 關鍵字或 ‘this’ 指標在物件成員函式被呼叫時用作隱式物件引數,並指向呼叫該函式的物件。我們將瞭解 ‘this’ 關鍵字的不同使用場景。
語法
‘this’ 關鍵字的用法如下所示
this->variable_name;
使用場景 1:解決變數遮蔽
變數遮蔽是 ‘this’ 指標非常常見的應用場景之一。當類成員變數與另一個引數變數或區域性變數具有相同的名稱時,就會發生變數遮蔽。區域性變數“遮蔽”了類成員變數。為了引用類成員變數,我們使用 ‘this’ 關鍵字。
語法
int value;
public:
void demoFunction(int value) {
this->value = value;
}
從語法中可以看出,使用 ‘this’ 關鍵字引用的變數是類成員變數,而另一個變數是僅在區域性範圍內可用的引數變數。
示例
#include <iostream>
using namespace std;
class Test {
//this is a class member variable
string testString;
public:
//non-static member function
void setData(string testString) {
//this is refering to the class member variable
this->testString = testString;
}
void getData() {
cout << "The string is: " << this->testString << endl;
}
};
int main() {
//create the object
Test test;
//call the member function
test.setData("This is a test for variable shadowing!");
test.getData();
return 0;
}
輸出
The string is: This is a test for variable shadowing!
使用場景 2:訪問成員變數
‘this’ 指標還可以用於訪問類內部的成員函式和變數。在前面的示例中,我們看到了 ‘this’ 如何解決變數遮蔽問題。如果我們必須在另一個類成員函式內部引用類的另一個成員函式,則使用 ‘this’ 指標。語法和示例如下所示。
語法
void demoFunction1() {};
void demoFunction2() {
this->demoFunction1();
}
從語法中可以看出,使用 ‘this’ 關鍵字引用的變數是類成員變數,而另一個變數是僅在區域性範圍內可用的引數變數。
示例
#include <iostream>
using namespace std;
class Test {
public:
//this is a public class member variable
string testString;
//non-static member function
void setData(string testString) {
//this is refering to the class member variable
this->testString = testString;
}
void getAndPrint(string str) {
//accessing both member variables and functions using this pointer
this->setData(str);
cout << "The string is: " << this->testString << endl;
}
};
int main() {
//create the object
Test test;
//call the member function
test.getAndPrint("This is a test for member accession!");
return 0;
}
輸出
The string is: This is a test for member accession!
使用場景 3:訪問物件
我們可以使用 ‘this’ 關鍵字訪問當前記憶體中的物件,並進一步操作它們。在下面的示例中,我們將使用成員函式和 ‘this’ 指標刪除當前物件。
語法
void demoFunction() {
delete this;
}
示例
#include <iostream>
using namespace std;
class Test {
public:
//this is a public class member variable
string testString;
//non-static member function
void setData(string testString) {
//this is refering to the class member variable
this->testString = testString;
}
void getAndPrint(string str) {
//accessing both member variables and functions using this pointer
this->setData(str);
cout << "The string is: " << this->testString << endl;
}
void delObject() {
//accessing the current object and deleting it
delete this;
}
};
int main() {
//create the object
Test test;
//call the member function
test.getAndPrint("This is a test for accessing objects!");
test.delObject();
test.getAndPrint("This is a test for accessing objects!");
return 0;
}
輸出(錯誤)
The string is: This is a test for accessing objects! munmap_chunk(): invalid pointer timeout: the monitored command dumped core sh: line 1: 321122 Aborted /usr/bin/timeout 10s main
在此示例中,我們使用 ‘this’ 指標刪除了當前物件,然後再次嘗試正常使用 ‘getAndPrint()’ 函式。我們可以看到,當它執行時,會引發“段錯誤”,因為該物件已從記憶體中刪除。
結論
從各種使用場景中可以看出,‘this’ 指標對於 C++ 中的各種操作非常有用。‘this’ 指標主要用於訪問當前分配物件的例項變數。需要注意的是,‘this’ 僅適用於非靜態成員函式。它不適用於非類函式,並且在使用時始終返回呼叫物件的地址。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP