抽出演算子をオーバーロードするC++プログラム
2つの属性first_nameとlast_nameを持つPersonクラスがあるとします。また、get_first_name()とget_last_name()という2つのメソッドがあり、それぞれ名と姓を取得または設定します。 coutステートメントを使用して名前を印刷するには抽出演算子(<<)をオーバーロードし、名前を印刷するには名前をオーバーロードする必要があります。
したがって、入力が名と姓( "Sumit"、 "Ray")の人物オブジェクトのようなものである場合、出力は名-Sumit、姓-Rayになります。
これを解決するには、次の手順に従います-
-
抽出演算子をオーバーロードするには、クラスの外部で定義する必要があります
-
リターンタイプはostreamリファレンスになります
-
入力パラメータは、ostream参照変数osとオブジェクト参照変数です
-
osを使用して、オブジェクトのすべての部分を適切な順序で抽出します
-
osオブジェクト参照を返します。
例
理解を深めるために、次の実装を見てみましょう-
#include <iostream> using namespace std; class Person { private: string f_name; string l_name; public: Person(string first_name, string last_name) : f_name(first_name), l_name(last_name) {} string& get_first_name() { return f_name; } string& get_last_name() { return l_name; } }; ostream& operator<<(ostream& os, Person& p) { os << "First name: " << p.get_first_name() << ", Last name: " << p.get_last_name(); return os; } int main(){ Person p("Sumit", "Ray"); cout << p << ", he is our member."; }
入力
p("Sumit", "Ray")
出力
First name: Sumit, Last name: Ray, he is our member.
-
C ++クラス名の後にセミコロンは何をしますか?
-のようなステートメントがある場合 Class Person; これは前方宣言です。次のコードは、Personという名前のクラスがあることを通知します。これは、これらの名前が使用されていることを確認すると、コンパイラーを満足させます。後でリンカはクラスの定義を見つけます。
-
C ++で単項マイナス演算子をオーバーロードしますか?
operatorキーワードは、クラスのインスタンスに適用されたときにoperator-symbolが何を意味するかを指定する関数を宣言します。これにより、演算子に複数の意味が与えられるか、「オーバーロード」されます。コンパイラーは、オペランドのタイプを調べることにより、演算子のさまざまな意味を区別します。 単項演算子は単一のオペランドで動作し、以下は単項演算子の例です- インクリメント(++)およびデクリメント(-)演算子。 単項マイナス(-)演算子。 論理否定(!)演算子。 単項演算子は、呼び出されたオブジェクトを操作します。通常、この演算子は、!obj、-obj、および++ obj