方法2オブジェクト指向

この方法の質量参加メカニズムと原則を呼び出し:(重要!)

説明:メソッド呼び出し及び質量参加機構及び機能は、基本的には同じではなく、同じ場所は、メソッドに渡され、また、引数として、メソッドを呼び出す、変数メソッド呼び出しです。私たちは説明してみましょう:

ケース1:実行する方法がgetSumが+説明前面に示されています

説明:

1)メソッド呼び出しメカニズムを呼び出し、同じ機能する変数を採用しています。
変数は、変数自体も道を行くために引数として渡されたとき2)ない同じ場所、メソッドを呼び出します。(変数は、基準タイプ、アドレスコピーである場合、変数は、値がコピーされ、値型の場合)


ケース2:以下、プログラムを書きます:

1)宣言構造Cirle、フィールド半径

2)メソッド宣言領域とCirle結合、それはエリアに戻ることができます。

3)ヒント:ドロープロセス領域+説明を行うために

 

使用方法の深さ分析:

メソッド宣言(定義)

FUNC(recevier型)methodNameの(パラメータリスト)(返されたリスト){
  メソッド本体の
  リターン戻り値
}

1)パラメータのリスト:入力表現

2)recevierタイプ:この方法の種類及びこのバインド、またはメソッド作用型の種類を入力したことを示し

3)recevierタイプ:タイプの構造であってもよい、カスタムの他のタイプであってもよいです

4)recevierタイプ:可変人構造(実施例):変数(例)などのタイプを入力しています

5)値のリストを返す:戻りを示す値が、複数であってもよいです

図メイン6)方法:その特定の機能ブロックを実現するために

7)return文は必要ありません


メソッドの考慮事項および詳細について説明します。

  1)構造型は、値型がメソッド呼び出しで、コンプライアンス値型伝達機構は、値の転送モードのコピーであります

  プログラマが処理を希望する場合2)、可変構造の値を変更し、構造がポインタの方法によって処理することができます

ケースプレゼンテーション:

型サークルのstruct {
  半径のfloat64
}

@我々の方法の効率を向上させるために、一般タイプおよび構造に結合したポインタである
エリア2()のfloat64 {FUNC(C *とのサークル)
  cはポインタであるため、//ため、そのフィールドのアクセスをスタンダード(* C)です。 RADIUS
  //戻り3.14 *(* C).radius *(* C).radius
  //(*c).radius等価c.radiusの
  c.radius = 10.0
  * c.radius 3.14 c.radiusリターン
}

FUNCのメイン(){

  円C VARの
  c.radius = 7.0
  // RES2:=(&C).area2()
  RES2:c.area2 =()
  //底最適化コンパイラ(&C).area2()と等価c.ares2()
  //コンパイラが自動的にC&に追加するため
  fmt.Println( "=の領域"、RES2)
  fmt.Println( "c.radius ="、c.radius)// 10
}

3)指定されたデータ型にGolang作用における方法(すなわち:)結合および指定されたデータ型、このように定義されたタイプはintなどではなく、構造体以外の方法を有することができ、これがあってもよいFLOAT32方法

ケース:
メインのためのパッケージ変更
のインポート(
  「FMT」

整数型はint

FUNC(iは整数)プリント(){
  fmt.Println( "I =" I)
}

//メソッドを記述し、iの値を変更することができ
FUNC(iは整数*)の変更(){
  * iは=私は+ *を1
}

FUNCのmain(){
  VAR I整数= 10
  i.print()
  i.change()
  fmt.Println( "I =" I)
}


アクセス範囲ルール4)を制御するための方法、および機能。メソッド名の最初の文字を小文字このパッケージは唯一のアクセス方法は、大文字ができ、このパッケージや他のパッケージにアクセスすることができます。

タイプがString()このメソッドを実装している場合5)、その後、fmt.Printlnデフォルトでは、この変数の文字列()の出力を呼び出します

ケース:

タイプの学生のstruct {
  名前の文字列の
  年齢はint
}

FUNC(STU *スチューデント)文字列()文字列{
  STR:= fmt.Sprintf( "名前= [%V]年齢= [%V]"、stu.Name、stu.Age)
  戻りSTR
}

FUNCのメイン(){

  STU:学生= {
  名: "トム"、
  年齢:20、
  }
  //あなたがメソッドの*学生、String型を実装する場合は、自動的に呼び出します
  fmt.Println(&STU)を
}

 

メソッドと関数の違い:

1)別の方法で呼び出します

  関数が呼び出された関数名(引数のリスト)を
  法と呼ばれている:メソッド名変数(引数リスト)

2)正常な機能のために、受信者は値型であり、ポインタ型データを直接送信することができません

案例:
Person型構造体{
  Nameストリング
}

FUNCのTEST01(Pパーソン){
  fmt.Println(p.Name)
}

FUNCのTEST02(のP *の人){
  fmt.Println(p.Name)
}

FUNCのメイン(){

  P-:人= {「トム」}
  の値がコピーされているため、TEST01(P-)//は、そのように書かれたアドレスTEST01(* p)は文句であろう通過できない
  TEST02(&P)を//アドレスがコピーであるので、そのままの値ではありませんコピー、TEST02(P)ので、エラーが書き込まれます。
}

3)方法(例えば、構造体法)、及び受信機は値型であり、この方法は、順番に同じであってもよい、式ポインタの変数によって直接呼び出すことができます。

案例:
Person型構造体{
  Nameストリング
}

FUNC(P人)TEST03() {// 主な機能が、着信アドレスを介して、しかし次のメイン関数の値唯一の方法であるので、pの値は、ジャックの受信コピーである場合値は変更されません。
  = p.Name "ジャック"
  fmt.Println( "TEST03()="、p.Name)//ジャック
}

FUNC(P *人)test04は( ){// ポインタタイプので、それが受信されたアドレスへのポインタになり、メソッドの名前の値の変化は、主な機能は、値を変更することです。
  = p.Name "メアリー"
  fmt.Println( "test04()="、p.Name)//メアリー
}


FUNCのメイン(){

  P:= {人"トム"}
  p.test03()
  fmt.Println( "主()= p.name"、p.Name)//トム

  (P&).test03()フォームから渡された//アドレスが、本質はコピーの値のまま
  fmt.Println( "メインp.name ="、p.Name)//トム

  (P-&).test04()
  fmt.Println( "メイン()p.name ="、P。名)//メアリーの
  p.test04()//同等(&P).test04()は、フォームからの値型を通過したが、それでも基本的にアドレスをコピーしています
}


要約:

  1)にかかわらず、コールの形態の、実際の決定は、この方法が主に見て、結合のタイプである、コピーの値であるか、またはアドレスをコピーします。

  2)(Pパーソン)として、結合の値と入力した場合、値がコピーされ、ポインタは、(P *が人)として、結合のタイプである場合、アドレスがコピーされます。

おすすめ

転載: www.cnblogs.com/green-frog-2019/p/11408154.html