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

C ++のドット(。)演算子と->の違いは何ですか?


ドットと矢印の演算子は、どちらもC++でクラスのメンバーにアクセスするために使用されます。それらはさまざまなシナリオで使用されます。 C ++では、class、struct、またはunionとして宣言された型は、「クラス型」と見なされます。したがって、以下は3つすべてを指します。

  • a.bは、bがオブジェクトのメンバー(またはオブジェクトへの参照[1])である場合にのみ使用されます。したがって、a.bの場合、aは常にクラスの実際のオブジェクト(またはオブジェクトへの参照)になります。
  • a→bは基本的に(* a).bの省略表記です。つまり、aがオブジェクトへのポインタである場合、a→bはポイントが指すオブジェクトのプロパティbにアクセスしています。 。
注意してください。オーバーロード可能ではありません。 →はオーバーロード可能な演算子なので、この演算子を使用するときに呼び出す必要のある独自の関数(演算子→())を定義できます。したがって、aがoperator→をオーバーロードするクラスのオブジェクトである場合(一般的なそのようなタイプはスマートポインターとイテレーターです)、その意味はクラスデザイナーが実装したものです。

[1]参照は、意味的にはオブジェクトのエイリアスであるため、#3にも「またはポインタへの参照」を追加する必要があります。ただし、ポインタ(T *&)への参照が使用されることはめったにないため、これは役立つというよりも混乱を招くと思いました。

#include<iostream>
class A {
   public: int b;
   A() { b = 5; }
};

int main() {
   A a = A();
   A* x = &a;
   std::cout << "a.b = " << a.b << "\n";
   std::cout << "x->b = " << x->b << "\n";
   return 0;
}
出力 これにより出力が得られます-

5
5

  1. C#のインターフェイスとクラスの違いは何ですか?

    インターフェイスは、フィールドまたはメソッドの実装がないクラスです。定義したメソッドを実装することはできません。 クラスは通常、インターフェースで定義されたメソッドを実装します。 インターフェース インターフェイスは、インターフェイスのメンバーであるプロパティ、メソッド、およびイベントを定義します。インターフェイスには、メンバーの宣言のみが含まれます。メンバーを定義するのは、派生クラスの責任です。 public interface interface_name {    // interface_members } クラス クラスはデータ型の青写真です。これは実際には

  2. Pythonの=演算子と==演算子の違いは何ですか?

    Pythonでは、シンボルは割り当てとして定義されます オペレーター。左側に1つの変数、右側に式が必要です。右側の式の値は、左側の変数に割り当てられます。変数の式と名前は互換性がありません。 >>> a=10 >>> b=20 >>> c=a+b >>> a,b,c (10, 20, 30) >>> a+b=c SyntaxError: can't assign to operator ==記号は比較演算子であり、等しいと呼ばれます オペレーター。いずれかの側のオペランドが等しい場合はtrueを