programing

Objective-C에서 연산자를 오버로드 할 수 있습니까?

sourcetip 2021. 1. 14. 23:43
반응형

Objective-C에서 연산자를 오버로드 할 수 있습니까?


Objective-C에서 연산자 사용을 재정의 할 수 있습니까?

예를 들면

myClassInstance + myClassInstance

사용자 정의 함수를 호출하여 둘을 추가합니다.


연산자 오버로딩은 Objective-C의 기능이 아닙니다. 두 개의 클래스 인스턴스를 함께 추가 할 수있는 경우 메서드를 제공하고 해당 메서드를 사용하여 추가 할 수 있도록합니다.

Thing *result = [thingOne thingByAddingThing:thingTwo];

또는 클래스가 변경 가능한 경우 :

[thingOne addThing:thingTwo];

아니요, Objective-C에서는이 작업을 수행 할 수 없습니다.


이제 objC의 후속 버전 인 Swift 에서이 작업을 수행 할 수 있습니다 . Objective-C와 Swift가 함께 작동하도록 만들어 졌기 때문에 이것은 흥미로울 수 있습니다.


개체에 대한 구독을 지원할 수 있습니다. 첨자는 하지 연산자 오버로딩하지만 컬렉션 개체에 대한 편리 할 수 있습니다. NSArray와 NSDictionary는 모두 구독을 지원합니다. 예를 들면 :

NSMutableArray *a = [NSMutableArray new]; a[0] = @"Hello";

인덱스 구독을 지원하는 방법은 다음을 구현하는 것입니다.

-(id)objectAtIndexedSubscript:(NSUInteger)idx; -(void)setObject:(id)newObject atIndexedSubscript:(NSUInteger)idx];


아니요, Objective-C는 연산자 오버로딩을 지원하지 않습니다.


첫째, 연산자 오버로딩은 사악 합니다. 둘째, C에는 연산자 오버로딩이 없으며 Objective-C는 소수의 키워드와 메시징 구문 만 추가하는 C의 적절한 상위 집합입니다.

즉, Apple의 개발 환경을 사용하는 경우 Objective-C 대신 Objective-C ++를 사용하면 연산자 오버로딩을 포함하여 C ++의 모든 실수와 잘못된 기능에 액세스 할 수 있습니다. Objective-C ++를 사용하는 가장 간단한 방법은 구현 파일의 확장자를 ".m"에서 ".mm"로 변경하는 것입니다.

참조 URL : https://stackoverflow.com/questions/3613980/can-i-overload-an-operator-in-objective-c

반응형