Computer >> Máy Tính >  >> Lập trình >> C ++

Sử dụng từ khóa rõ ràng trong C ++

Ở đây chúng ta sẽ thấy tác dụng của từ khóa rõ ràng trong C ++. Trước khi thảo luận về điều đó, chúng ta hãy xem một mã ví dụ và cố gắng tìm ra đầu ra của nó.

Ví dụ

#include <iostream>
using namespace std;
class Point {
   private:
      double x, y;
   public:
      Point(double a = 0.0, double b = 0.0) : x(a), y(b) {
         //constructor
      }
      bool operator==(Point p2) {
         if(p2.x == this->x && p2.y == this->y)
         return true;
         return false;
      }
};
int main() {
   Point p(5, 0);
   if(p == 5)
      cout << "They are same";
   else
      cout << "They are not same";
}

Đầu ra

They are same

Điều này đang hoạt động tốt vì chúng ta biết rằng nếu một hàm tạo có thể được gọi chỉ bằng một đối số, thì nó sẽ được chuyển đổi thành hàm tạo chuyển đổi. Nhưng chúng tôi có thể tránh loại chuyển đổi này, vì điều này có thể tạo ra một số kết quả không đáng tin cậy.

Để hạn chế chuyển đổi này, chúng ta có thể sử dụng công cụ sửa đổi rõ ràng với hàm tạo. Trong trường hợp đó, nó sẽ không được chuyển đổi. Nếu chương trình trên được sử dụng bằng từ khóa rõ ràng, thì nó sẽ tạo ra lỗi biên dịch.

Ví dụ

#include <iostream>
using namespace std;
class Point {
   private:
      double x, y;
   public:
      explicit Point(double a = 0.0, double b = 0.0) : x(a), y(b) {
         //constructor
      }
      bool operator==(Point p2) {
         if(p2.x == this->x && p2.y == this->y)
         return true;
         return false;
      }
};
int main() {
   Point p(5, 0);
   if(p == 5)
      cout << "They are same";
   else
      cout << "They are not same";
}

Đầu ra

[Error] no match for 'operator==' (operand types are 'Point' and 'int')
[Note] candidates are:
[Note] bool Point::operator==(Point)

Chúng tôi vẫn có thể nhập một giá trị cho loại Điểm bằng cách sử dụng tính năng ép kiểu rõ ràng.

Ví dụ

#include <iostream>
using namespace std;
class Point {
   private:
      double x, y;
   public:
      explicit Point(double a = 0.0, double b = 0.0) : x(a), y(b) {
         //constructor
      }
      bool operator==(Point p2) {
         if(p2.x == this->x && p2.y == this->y)
         return true;
         return false;
      }
};
int main() {
   Point p(5, 0);
   if(p == (Point)5)
      cout << "They are same";
   else
      cout << "They are not same";
}

Đầu ra

They are same