Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Toán tử phạm vi (Scope Resolution) vs con trỏ this trong C++?

Chúng ta sẽ xem một số ví dụ C++ để hiểu đầu ra và nắm rõ mục đích, chức năng của toán tử phạm vi và con trỏ 'this' trong C++.

Nếu code có thành viên 'x', và ta muốn dùng hàm khác nhận tham số cũng tên 'x', thì trong hàm đó, nếu dùng 'x', nó sẽ che biến thành viên, và biến cục bộ sẽ được dùng. Kiểm tra trong code sau.

Ví dụ

#include <iostream>
using namespace std;

class MyClass {
private:
  int x;
public:
  MyClass(int y) {
    x = y;
  }
  void myFunction(int x) {
    cout << "Value of x is: " << x;
  }
};

int main() {
  MyClass ob1(10);
  ob1.myFunction(40);
}

Kết quả

Value of x is: 40

Để truy cập thành viên x của lớp, ta dùng con trỏ 'this'. 'this' là con trỏ đặc biệt trỏ đến đối tượng hiện tại. Xem cách 'this' giúp việc này.

Ví dụ

#include <iostream>
using namespace std;

class MyClass {
private:
  int x;
public:
  MyClass(int y) {
    x = y;
  }
  void myFunction(int x) {
    cout << "Value of x is: " << this->x;
  }
};

int main() {
  MyClass ob1(10);
  ob1.myFunction(40);
}

Kết quả

Value of x is: 10

Trong C++, có toán tử khác gọi là toán tử phạm vi. Toán tử này dùng để truy cập thành viên của lớp cha hoặc thành viên tĩnh. Nếu dùng toán tử phạm vi cho trường hợp trên, nó sẽ không hoạt động. Tương tự, nếu dùng 'this' cho thành viên tĩnh, sẽ gây vấn đề.

Ví dụ

#include <iostream>
using namespace std;

class MyClass {
  static int x;
public:
  void myFunction(int x) {
    cout << "Value of x is: " << MyClass::x;
  }
};

int MyClass::x = 50;

int main() {
  MyClass ob1;
  ob1.myFunction(40);
}

Kết quả

Value of x is: 50