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

抽出演算子をオーバーロードする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.

  1. C ++クラス名の後にセミコロンは何をしますか?

    -のようなステートメントがある場合 Class Person; これは前方宣言です。次のコードは、Personという名前のクラスがあることを通知します。これは、これらの名前が使用されていることを確認すると、コンパイラーを満足させます。後でリンカはクラスの定義を見つけます。

  2. C ++で単項マイナス演算子をオーバーロードしますか?

    operatorキーワードは、クラスのインスタンスに適用されたときにoperator-symbolが何を意味するかを指定する関数を宣言します。これにより、演算子に複数の意味が与えられるか、「オーバーロード」されます。コンパイラーは、オペランドのタイプを調べることにより、演算子のさまざまな意味を区別します。 単項演算子は単一のオペランドで動作し、以下は単項演算子の例です- インクリメント(++)およびデクリメント(-)演算子。 単項マイナス(-)演算子。 論理否定(!)演算子。 単項演算子は、呼び出されたオブジェクトを操作します。通常、この演算子は、!obj、-obj、および++ obj