これは理にかなっていますか?
出来た。
クラスに何があるかは関係ありません。それが可能なクラスがあるかどうかを知りたいのですが、ある場合は例を挙げていただけますか? 各クラスに名前と番号 (string getName(), int getNumber()) があるとしたら、cin を使用するとどうなるでしょうか?
>>
コードは、フィールドの値を取得するように定義されていることを前提としています...
std::istream& operator>>(std::istream&, Class1& x)
{
return is >> x.name_ >> x.number_;
}
悲しいことに、このコードは変換が成功したかどうかをチェックしません (つまり、入力を期待どおりに文字列と数値に解析できます)。より良いコードは次のようになります。
Class1 c1, c2;
if (cin >> c1 >> c2)
if(c1.getName() == c2.getName())
cout << c1 + c2 << endl;
「hello 20 goodbye 30」と入力すると、c1
のフィールドがそれぞれ「hello」と 20 にc2
設定され、明らかに「さようなら」と 30 に設定されます。
そして、c1のcoutを使用するときは?
をストリーミングする場合c1
、出力は作成したオペレータによって決定されます。簡単な実装は次のようになります。
std::ostream& operator<<(std::ostream& os, const Class1& c)
{
return os << c.name_ << ' ' << c.number_;
}
c1+c2 とはどういう意味ですか? ありがとう、私はあなたが私を助けてくれることを願っています!
これは、マッチング関数が意味することを意味します。たとえば、次のようにします。
Class1 operator+(const Class1& lhs, const Class1& rhs)
{
return Class1(lhs.name_ + rhs.name_, lhs.number_ + rhs.number_);
}
または、数字を連結して、number_
7 と 23 を 723 にする必要があるかもしれません...プログラムのコンテキストで意味のあるものは何でも。
編集: ところで、Java では c1.getName().equals(c2.getName()) を使用して文字列を比較しますが、C++ では必要ですか?
通常、以下を使用できるように比較関数を作成します==
。
bool operator==(const Class1& lhs, const Class1& rhs)
{
return lhs.name_ == rhs.name_ && lhs.number_ == rhs.number_;
}
もちろん、大文字と小文字の違いを無視したり、"Anthony" と "Tony" を同等のものと見なしたりできます。