メンバー関数の後ろにある関数を呼び出して戻り値を変更し、どのように書きますか?私は正常に言い換えるメンバー関数の後に続くメンバー関数とは何を呼びますか?どのように記述しますか?
を書くのですか:
std::cout << box.getVolume().inCubicFeet();
std::cout << box.getVolume().inCubicCentimeters();
メンバー関数の後ろにある関数を呼び出して戻り値を変更し、どのように書きますか?私は正常に言い換えるメンバー関数の後に続くメンバー関数とは何を呼びますか?どのように記述しますか?
を書くのですか:
std::cout << box.getVolume().inCubicFeet();
std::cout << box.getVolume().inCubicCentimeters();
:コードは次のように書くことができます前記オブジェクトに対してそれを呼び出す。例えば :これは、方法/メンバ関数と呼ばれる
class Volume{
...
int inCubicFeet() const {
//convert it and return it
}
int inCubicCentimeters() const {
//convert it and return it
}
};
class Box{
Volume v; //volume object that is initialized somewhere
//(either in the constructor of Box or in a method like setVolume)
...
Volume const& getVolume() const {
return v;
}
};
'Volume&getVolume(){..'または 'const Volume&getVolume(){..'? – user463035818
実際、私はしませんでした。それは必要ではないが、あなたの編集前にボリュームインスタンス –
が占有する目的とサイズによっては役に立つかもしれないので、テキストは "...あなたは参照を返す必要がある"と言った。これはコードと一致しなかった。しかし、今私はもう苦情はありません;) – user463035818
box.getVolume()
ニーズがstd::ostream
が<<
演算子をオーバーロードしているの値を返す関数inCubicFeet()
が定義されているclass
のオブジェクトを返すために、 (ただし、独自のオーバーロードを定義することはできます)。その2番目の部分については、double
で十分です。
「戻り型のメンバ関数」と呼ばれます。これらのメソッドには特別なものは何もありません。それはあなたがすることができます以下のどんな方法ように、タイプVolume
(またはタイプVolume &
の対象にさえ参照)のオブジェクトを返すようにgetVolume()
ニーズを動作させるために
const Volume& v = box.getVolume(); // my guess on what the return type is
std::cout << v.inCubicFeet();
'const Volume&v'が良いと思われます。あるいは 'auto && v'。 – Jarod42
@ Jarod42 'auto &&'は、スニペットの全体を敗北させました。別のタイプが含まれていることを示すことを意味していました。しかし、 'const&'のために同意しました – user463035818
[連鎖](http://jamie-wong.com/2012/02/01/stop-returning-void/)。 – StoryTeller
これに非常に類似しているのは、メソッドがメソッド連鎖を可能にする 'this'を返すところの[流暢なインターフェース](https://en.wikipedia.org/wiki/Fluent_interface)の概念です。しかし、あなたが別のクラスを返すことを考えれば、まったく同じではありません。 –