방법 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), 가변 구조물의 값을 수정 구조 포인터에 의해 처리 될 수있다

사례 발표 :

원형 구조체 {입력
  반경을 float64
}

@ 일반적으로 바인딩 유형과 구조 포인터 우리의 방법의 효율성을 향상시키기 위해
FUNC를 (ㄴ * 원) 에리어 () float64 {
  C 포인터이며, 그 분야의 때문에 접근이 우리의 표준이기 때문에 //을 (* C). RADIUS는
  3.14 * (* C)의 .radius * (* C) .radius 리턴 //
  //(*c).radius 등가 c.radius의
  c.radius = 10.0
  3.14 c.radius 복귀 * 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)
}

// 방법을 쓰고 난 값 변경
{FUNC (나는 정수 *) 변경 ()
  내가 * + * = I. (1)
}

FUNC 주 () {
  VAR 정수 I = 10
  i.print ()
  i.change ()
  fmt.Println ( "I ="I)
}


액세스 범위 룰 4) 제어 방법, 및 기능. 메소드의 이름 첫 글자를 소문자는 전용 액세스 방법을 대문자로 할 수있는이 패키지는,이 패키지와 다른 패키지에 액세스 할 수 있습니다.

형식 문자열 ()이 메소드를 구현하는 경우 5) 다음 fmt.Println는 기본 문자열이 변수 ()를 호출 출력

케이스 :

형 학생 구조체 {
  이름 문자열
  나이 INT
}

FUNC (STU * 학생) 문자열 () 문자열 {
  STR : = fmt.Sprintf ( "이름 = [%의 V] 나이 = [%의 V]"stu.Name, stu.Age)
  반환 STR
}

FUNC 메인 () {

  STU : 학생 = {
  이름 : "톰",
  나이 : 20
  }
  당신이 방법 * 학생 문자열 유형을 구현하는 경우 // 자동으로 호출
  fmt.Println (STU)를
}

 

메소드와 함수의 차이 :

1) 다른 방법으로 전화

  함수가 호출된다 (인수리스트) 함수명
  메소드 호출 : 메소드 이름 변수 (인수리스트)

2) 일반 함수를 들면, 수신자가 치형 포인터 타입 데이터를 직접 전송 될 수 없다

案例:
Person 형 구조체 {
  이름 문자열
}

FUNC의 test01 (P 사람) {
  fmt.Println (p.Name)
}

FUNC의 test02 (P는 * 사람) {
  fmt.Println (p.Name)
}

FUNC 메인 () {

  P- 형 다음 이용시 = { "톰"}
  값이 복사되기 때문에 test01 (P- 형)이 //는 어드레스 test01 (* P)를 통과 할 수 있도록 기록이 불평
  이 사본이기 때문에, (P) test02을 // 어드레스는 직접적 값이 아닌 복사, test02 (P) 그래서 오류가 기록됩니다.
}

3) 방법 (예를 들어, 구조체에있어서), 상기 수신기는, 값 유형이 방법은 다시 동일해도 입력 포인터의 변수에 의해 직접 호출 될 수있다.

案例:
Person 형 구조체 {
  이름 문자열
}

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 사람 (AS, 결합 유형 값이 복사되고, 포인터는 P * 이용시 (구속력의 일종) 인 경우, 어드레스를 복사 한 경우.

추천

출처www.cnblogs.com/green-frog-2019/p/11408154.html