메소드 선언 후 const 수정자는 무엇을 의미합니까? - 페이지 5

 
Alexey Kozitsyn :
클래스 A의 object1이 클래스 A의 상수 메서드 호출하는 경우 이 메서드는 이 object1(즉, 호출한 object1)을 변경할 수 없다는 사실에도 불구하고 여기에서 호출합니다. object1이 동일한 상수 메서드에 대한 참조로 전달되었지만 클래스 A의 object2에서 호출된 경우 object1이 변경될 수 있습니다. Object2는 그렇지 않습니다.

객체가 어떻게 메소드를 호출할 수 있습니까? 메서드는 함수 또는 다른 메서드에서 호출할 수 있습니다.

클래스 메서드만 호출되는 것이 아니라 특정 개체의 메서드가 호출됩니다. 클래스 자체는 추상화입니다.

 
Dmitry Fedoseev :

객체가 어떻게 메소드를 호출할 수 있습니까? 메서드는 함수 또는 다른 메서드에서 호출할 수 있습니다.

클래스 메서드만 호출되는 것이 아니라 특정 개체의 메서드가 호출됩니다. 클래스 자체는 추상화입니다.

여기 주석이 있습니다. 그리고 다음과 같은 기록

obj.method();

이것은 무엇이라고 합니까?

당신 자신은 다음과 같이 씁니다.

클래스 메서드만 호출되는 것이 아니라 특정 개체의 메서드가 호출됩니다.

당신은 또한 그러한 기록을 받아들일 수 있다고 말합니다.

method();

메서드는 무엇을 호출합니까?

업데이트: 즉 메서드는 어떻게 호출됩니까?

 
@Alexey Kozitsyn :

여기 주석이 있습니다. 그리고 다음과 같은 기록

이것은 무엇이라고 합니까?

당신 자신은 다음과 같이 씁니다.

당신은 또한 그러한 기록을 받아들일 수 있다고 말합니다.

메서드는 무엇을 호출합니까?

업데이트: 즉 메서드는 어떻게 호출됩니까?

상황을 봐. 내 잘못이 아니라 당신이 오해하고 있습니다. Alexey의 예는 당신에게 옳지 않은 것처럼 보이지만 나에게 매우 명확하고 이해할 수있는 것처럼 보입니다. 그는 나에게 질문을 제기하지 않고 이해 만했습니다.

--

"유형의 레코드" - "obj" 개체의 "메서드" 메서드에 대한 호출이라고 합니다.

--

"당신은 여전히 그런 기록을 받아들일 수 있다고 말합니다." - 당신이 이것에 대해 쓰고 있다는 인상을 줍니다.

---

메서드는 아무 것도 호출하지 않습니다. 메소드가 호출됩니다.

 
Dmitry Fedoseev :

상황을 봐. 당신은 내가 아니라 오해가 있습니다. Alexey의 예는 당신에게 옳지 않은 것처럼 보이지만 나에게 매우 명확하고 이해할 수있는 것처럼 보입니다. 그는 나에게 질문을 제기하지 않고 이해 만했습니다.

--

"형식의 레코드"는 "obj" 개체의 "메서드" 메서드에 대한 호출이라고 합니다.

--

"당신은 여전히 그런 기록을 받아들일 수 있다고 말합니다." - 당신이 이것에 대해 쓰고 있다는 인상을 줍니다.

---

메서드는 아무 것도 호출하지 않습니다. 메소드가 호출됩니다.

Alexei의 예는 상당히 수용 가능하지만 제 개인적인 생각으로는 그는 다른 사람들의 모범이 되어서는 안 됩니다.

알다시피, 당신은 여전히 내 질문에 대답하지 않았습니다 . 클래스 메서드 에 대한 호출을 시작하는 것은 무엇입니까?

모든 방법. 간단한 질문, 당신은 OOP에 대한 초보자를 위한 기사를 작성했습니다.

메서드는 아무 것도 호출하지 않습니다. 메소드가 호출됩니다.

무엇이라고 하나요?
 
Alexey Kozitsyn :

1. Alexei의 예는 상당히 수용 가능하지만 내 개인적인 견해로는 그는 다른 사람들의 모범이되어서는 안됩니다.

2. 당신은 여전히 내 질문에 대답하지 않았습니다 . 클래스 메서드 호출을 초기화하는 항목(또는 메서드를 호출하는 항목(메소드에 의해 호출되는 항목이 아니라 메서드 자체를 호출하는 대상/누가))?

3. 모든 방법. 간단한 질문, 당신은 OOP에 대한 초보자를 위한 기사를 작성했습니다.

1. 귀하의 모범을 제공하십시오.

2. 대답하지 않았다. 대화 내용이 명확하지 않기 때문입니다.

3. 대화 내용도 명확하지 않습니다.

 
void fun(){
   obj.method();
}
"obj" 개체의 "method" 메서드는 "fun" 함수에서 호출됩니다.
 
Dmitry Fedoseev :

1. 귀하의 모범을 제공하십시오.

2. 대답하지 않았다. 대화 내용이 명확하지 않기 때문입니다.

3. 대화 내용도 명확하지 않습니다.

2. 클래스 메소드(정적 메소드가 아님)를 호출하는 것에 대해 이야기하십시오. 클래스 메서드는 클래스 개체에 의해 호출되거나 그렇지 않으면 클래스 개체가 다음과 같이 클래스 메서드에 대한 호출을 시작합니다.

obj.method();   // obj - объект класса А, method() - метод класса А

메서드가 상수인 경우 호출된 개체를 수정할 수 없습니다. 객체 객체. 전달된 개체(예: obj2):

obj.method( obj2 );

const 수정자 없이 참조로 전달된 경우 수정할 수 있습니다. 그게 다야.

나는 처음에 포럼의 "corefeevs"의 진술을 이해하지 못했습니다.

클래스의 멤버를 변경할 수 없음을 의미합니다 .

왜냐하면 MQL에서는 그러한 양 고추 냉이를 기다릴 수 없습니다. 즉, 원칙적으로 메서드는 개체를 변경할 수 없습니다.

또는

상수 방법 은 "우리는 최고를 원했지만 항상 그랬듯 결과가 나왔다"는 속담의 또 다른 예입니다. 나는 C ++의 경우 이것이 일반적으로 모토라고 생각합니다. 실질적인 이점은 없지만 OOP 프로그램의 설계를 상당히 복잡하게 만듭니다. 수정되는 객체의 유형을 제어하는 데 지속적으로 필요합니다(또한 일정해야 함) .


또는

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

메소드 선언 후 const 수정자는 무엇을 의미합니까?

바실리 소콜로프 , 2016.02.01 14:02

Alex가 예제를 작성했습니다. const 메소드는 클래스의 멤버를 변경할 수 없습니다 ...

왜 안될까요?! 모든 것이 아름답게 변합니다. 그리고 여기에서 표현 자체는 정확하지 않습니다. 상수 메서드는 클래스 인스턴스의 멤버를 변경할 수 없습니다.

 
Vasiliy Sokolov :

나는 그것을 부정하지 않습니다. Sharpe는 참으로 완벽하고 훌륭하고 아름다운 언어입니다.

음, const를 사용하면 항상 나갈 수 있다고 가정해 보겠습니다. 그러나 const가 제공하는 예를 들어 간략하게 설명하는 것이 좋습니다. 그것의 진정한 이점은 무엇입니까? 예를 들어, 손가락을 빨지 않는 것이 좋습니다.

당신이 당신 자신과 전체 프로젝트 를 위해 수천-수만 줄을 쓸 때 그것은 한 가지입니다. 또 다른 문제는 프로젝트가 수백만 줄에 달하는 긴 작업을 고객에게 넘겨줄 때 발에 치아가 없는 힌두교 하리크리슈나가 앉아 있는 경우입니다. 방갈로르에서 온 인디언들과 함께 일했는데, 사실 우리 친구들보다 수준이 낮았습니다.

같은 장소에서 누군가가 프로그래머가되는 법을 배우지 않고 나머지 친척을 일터로 끌어 들이고 전혀 알지 못할 수도 있습니다. 집시들입니다.

그리고 중요한 코드가 lib에 패키지되어 있으면 손상될 가능성이 적습니다. 글쎄, 나는 그렇게 생각한다.

 
Alexey Kozitsyn :

...

왜 안되는거야?! 모든 것이 아름답게 변합니다. 그리고 여기에서 표현 자체는 정확하지 않습니다. 상수 메서드는 클래스 인스턴스의 멤버를 변경할 수 없습니다.

이것이 의미하는 바입니다. 이 컨텍스트에서는 유형이 논의되지 않기 때문입니다. "자체 클래스" - 해당 인스턴스(즉, 개체)가 분명합니다.

 void bar(X& obj) const 
    {
        obj._x = 42 ; // Здесь меняем члена не своего класса OK! obj передается по ссылке и не имеет модификатора const
        _x = 42 ; // Попытка изменить члена своего класса ERROR!
    }

_x 멤버는 bar 메서드와 같은 클래스에 속합니다.

C obj._x - 여기서 _x 멤버는 obj 외부 클래스에 있습니다.

_x는 우리가 작성 중인 클래스를 참조하고 obj.x는 처리 중인 외부인을 참조하는 것이 분명하기 때문에 인스턴스가 아닌 클래스에 대해 이야기하는 것이 합리적으로 보입니다.

OOP 용어에 대해 이야기하면 모든 용어는 약간(또는 많이)입니다.

 

개인적으로 저는 항상 클래스 변수를 변경할 수 없는 메서드를 const 메서드로 이해했습니다.

나는 그것을 매우 드물게 사용했습니다. 메소드를 재정의할 때 무언가를 변경해야 하고 기본 메소드가 상수인 상황에 두 번 이상 부딪쳤기 때문입니다(여기에서 이미 언급했습니다).

나는 정적 방법을 광범위하고 두껍게 사용합니다. 실제로 어떤 어려운 수업이든. 일반적으로 이들은 클래스 변수에 대한 액세스가 필요하지 않은 "서비스" 추가 메서드입니다.

또한 "하루의 초"와 같은 상수의 경우 #define이 아닌 정적 const 구성을 사용하려고 합니다. 동시에 이러한 상수의 선언과 초기화는 다른 위치에 있지만 다른 한편으로 유형 제어가 발생하여 두 번 이상 도움이 되었습니다.