• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++言語 メンバ関数)

C++言語のメンバ関数の中身と使い方

このQ&Aのポイント
  • C++言語のクラスのメンバ関数について詳しく知りたいです。特にstringクラスのMid(int start, int length)関数とoperator+関数について教えてください。
  • stringクラスのMid(int start, int length)関数は、指定した位置から指定した長さの部分文字列を返す関数です。operator+関数は、2つの文字列を連結する演算子です。
  • 詳しい解説やサンプルコードは、公式ドキュメントやC++の学習サイトなどを参考にしてください。C++のメンバ関数を理解することで、より効果的なプログラミングが可能になります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ちょっとと特殊なところはあるけど, 最終的な結果は「(メンバでない) 関数」と大して変わりません. 特に virtual でない関数は「this という隠れ引数を持った, メンバでない関数」と同じといっていいでしょう. たとえば, 上の String::Mid は概念的に String String_Mid(const String *this, int start, int length) { //.... } と全く同じ. 呼び出すときに str.Mid(start, len) とあったら String_Mid(&str, start, len) と変換されると思ってもいいでしょう. operator で定義されるユーザ定義演算子も本質は同じで, ただ「演算子として書いていても自動的に関数呼び出しに変換される」だけです. だからイメージとしては String String_add(const String *this, const String &s) { return String(this->p + s.q + s.p); } としたのと同じです. 「ポインタにポインタを加えようとしました」と出る理由は分かりますか?

kouharing
質問者

補足

理由はよくわかりません。。

その他の回答 (3)

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.4

>2つめのほうはポインタにポインタを加えようとしましたとでます。 参照といっても、実体はポインタだからです。 String String::operator+(const String&s)const{ return String(p+s.q+s.p); のpはchar型へのポインタですね。(char *p;) sはString型への参照です(const String&s)が、 実体はString型へのポインタです。 だから "ポインタにポインタを加えようとしました" です。

参考URL:
http://sealsoft.jp/ptr_and_ref.html
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

this->p とか s.q とか s.p とかの型が String であると思った根拠を述べよ.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

this->p とか s.q とか s.p の型ってなんだ.

kouharing
質問者

補足

Stringですか

関連するQ&A