C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での明示的なキーワードの使用


ここでは、C++での明示的なキーワードの効果を確認します。それについて説明する前に、1つのサンプルコードを見て、その出力を調べてみましょう。

#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

1つの引数のみを使用して1つのコンストラクターを呼び出すことができる場合、それは変換コンストラクターに変換されることがわかっているため、これは正常に機能しています。ただし、信頼性の低い結果が生成される可能性があるため、この種の変換は回避できます。

この変換を制限するために、コンストラクターで明示的な修飾子を使用できます。その場合、変換されません。上記のプログラムを明示的なキーワードを使用して使用すると、コンパイルエラーが発生します。

#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)

明示的なキャストを使用して、ポイントタイプに値を型キャストすることもできます。

#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

  1. C++で複素数を使用したジオメトリ

    このセクションでは、C++でSTLの複合クラスを使用してポイントクラスを作成する方法を説明します。そして、それらをいくつかのジオメトリ関連の問題に適用します。複素数は、STL(#include )の複素数クラス内にあります。 ポイントクラスの定義 複合点をポイントにするには、complex の名前をpointに変更してから、xを複合クラスのreal()に変更し、yを複合クラスのimag()に変更します。したがって、ポイントクラスをシミュレートできます。 # include <complex> typedef complex<double> point; # defin

  2. C++の別のポイントを中心としたポイントの回転

    原点を中心とした点Xの回転は、反時計回りに角度θで行われます。- 原点反clRotateockwiseについてのXbyθ:X * Polar(1.0、θ)。 ここで、複素数の関数polarはヘッダーファイルで定義され、位相角と大きさを使用して複素数を見つけるために使用されます。polar(mag、angle)は複素数を返します。 点Yを中心とした点Xの回転 ポイントを別のポイントを中心に回転させるには、すべての座標の移動が特定の方向に発生する平行移動を使用します。 XをYを中心に回転させる手順。 XをYに変換すると、Yが新しい原点になります。これは、すべてのポイントから