Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 명시적 키워드 사용

<시간/>

여기서 우리는 C++에서 명시적 키워드의 효과가 무엇인지 볼 것입니다. 이에 대해 논의하기 전에 하나의 예제 코드를 보고 그 출력을 알아보겠습니다.

#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";
}

출력

They are same

이것은 하나의 생성자를 하나의 인수만 사용하여 호출할 수 있는 경우 변환 생성자로 변환된다는 것을 알고 있기 때문에 잘 작동합니다. 그러나 이러한 종류의 변환은 신뢰할 수 없는 결과를 생성할 수 있으므로 피할 수 있습니다.

이 변환을 제한하기 위해 생성자와 함께 명시적 수정자를 사용할 수 있습니다. 이 경우 변환되지 않습니다. 명시적 키워드를 사용하여 위 프로그램을 사용하면 컴파일 오류가 발생합니다.

#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";
}

출력

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

명시적 캐스팅을 사용하여 여전히 값을 Point 유형으로 유형 변환할 수 있습니다.

#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";
}

출력

They are same