programing

목표-C와 C++는 어떻게 다릅니까?

minimums 2023. 5. 23. 21:45
반응형

목표-C와 C++는 어떻게 다릅니까?

구문, 기능, 패러다임, 프레임워크 및 라이브러리 측면에서 Objective-C와 C++의 주요 차이점은 무엇입니까?

*중요:저의 목표는 두 언어 간의 공연 전쟁을 시작하는 것이 아닙니다.저는 진짜 확실한 사실만을 원합니다.사실, 제 질문은 성과와 관련이 없습니다!주관적으로 보일 수 있는 것에 대한 출처를 제시해 주십시오.

주요 차이점 중 일부는 다음과 같습니다.

  • C++은 다중 상속을 허용하지만 Objective-C는 허용하지 않습니다.
  • C++와 달리 Objective-C는 메서드 매개변수의 이름을 지정할 수 있도록 하며 메서드 시그니처는 매개변수의 이름과 유형 및 반환 유형만 포함합니다(아래의 bbum's 및 Chuck의 주석 참조).비교적 C++ 멤버 함수 서명에는 함수 이름뿐만 아니라 매개 변수/반환의 유형(이름 없음)만 포함됩니다.
  • 는 C++를 사용합니다.bool,true그리고.false는 목원-인표를 사용합니다.BOOL,YES그리고.NO.
  • 는 C++를 사용합니다.void*그리고.nullptr는 목-C를 선호합니다.id그리고.nil.
  • 는 "이 표-C는 "선기를"인 선택기)를 사용합니다.SEL 함수 포인터와 근사적으로 동등합니다.
  • 목표-C는 메소드/선택기를 통해 객체에 "메시지"를 보낼 수 있는 메시징 패러다임(ala Smalltalk)을 사용합니다.
  • 수 해줄 입니다.nilC++와 달리, 만약 당신이 멤버 함수를 호출하려고 시도한다면 충돌할 것입니다.nullptr
  • Objective-C는 동적 디스패치를 허용하며, 메서드가 호출되는 객체를 컴파일 시간에 알아야 하는 C++와 달리 런타임에 메시지에 응답하는 클래스를 결정할 수 있습니다(아래 빌헬름텔의 설명 참조).이것은 이전 포인트와 관련이 있습니다.
  • Objective-C는 "속성"을 사용하여 멤버 변수에 대한 접근자를 자동 생성할 수 있습니다.
  • 하면 는-C에있수다니에 할 수 있습니다.self클래스 이니셜라이저(생성자와 유사)가 원하는 경우 완전히 다른 클래스를 반환할 수 있습니다.와는 대조적으로,의 새 경우에 암묵적으로 으로 사용하여) C++로 만듭니다.new원래 지정한 유형임이 보장됩니다.
  • 마찬가지로, Objective-C에서 다른 클래스는 메서드 호출을 가로채기 위해 런타임에 대상 클래스를 동적으로 변경할 수도 있습니다.
  • Objective-C에는 C++의 네임스페이스 기능이 없습니다.
  • 목표-C에는 C++ 참조와 동등한 값이 없습니다.
  • 목표-템플릿이 부족합니다. 대신 컨테이너에서 약한 타이핑을 허용하는 것을 선호합니다.
  • 목표-C는 암시적 메서드 오버로드를 허용하지 않지만 C++은 허용합니다. C C++ 로int foo (void)그리고.int foo (int)합니다.foo는 명시적 가 필요합니다.- (int) foo그리고.- (int) foo:(int) intParam이는 Objective-C의 명명된 매개 변수가 기능적으로 C++의 이름 망글링과 동일하기 때문입니다.
  • 목표-C는 일반적으로 적합치를 갖는 C++와 달리 메서드와 변수가 동일한 이름을 공유할 수 있도록 합니다.저는 이것이 함수 포인터 대신 선택기를 사용하는 Objective-C와 관련이 있다고 생각합니다. 따라서 메서드 이름은 실제로 "값"을 가지고 있지 않습니다.
  • 하는 것을 . (Objective-C로 되어야 함). 모든 객체는 힙에서 할당되어야 합니다.alloc메시지 또는 암시적으로 적절한 공장 방식으로).
  • C++처럼, Objective-C는 구조체와 클래스를 모두 가집니다.그러나 C++에서는 거의 동일하게 취급되지만 Objective-C에서는 크게 다르게 취급됩니다. 예를 들어 스택에 구조체를 만들 수 있습니다.

제 생각에, 아마도 가장 큰 차이점은 구문일 것입니다.두 언어 모두 기본적으로 동일한 작업을 수행할 수 있지만, 제 생각에는 C++ 구문이 더 단순한 반면 목표-C의 일부 기능은 동적 디스패치 덕분에 특정 작업(GUI 설계 등)을 더 쉽게 만듭니다.

아마 제가 놓친 다른 많은 것들도 있을 것입니다. 제가 생각하는 다른 것들로 업데이트하겠습니다.그 외에도 리라 누나가 알려준 가이드를 적극 추천할 수 있습니다.참고로, 관심 있는 다른 사이트는 이것일 수 있습니다.

또한 저는 이제 막 목표-C를 배우기 시작했으며, 위의 많은 부분이 정확하거나 완전하지 않을 수 있다는 점을 지적해야 합니다. 그렇다면 사과드리며 개선을 위한 제안을 환영합니다.

편집: 다음 댓글에서 제기된 사항을 해결하기 위해 업데이트되었으며, 목록에 몇 가지 항목을 추가했습니다.

그들은 둘 다 C에 뿌리를 두고 있지만, 완전히 다른 두 언어입니다.

주요 차이점은 Objective-C가 디스패치를 위한 런타임 결정에 초점을 맞추고 상속 및 다형성을 처리하기 위해 런타임 라이브러리에 크게 의존하는 반면 C++에서는 일반적으로 정적 컴파일 시간 결정에 초점을 둡니다.

라이브러리의 경우 일반 C 라이브러리를 두 언어로 모두 사용할 수 있지만 기본 라이브러리는 완전히 다릅니다.

그러나 두 언어를 혼합할 수 있다는 점이 흥미롭습니다(몇 가지 제한 사항 있음).결과는 목표-C++입니다.

즉석에서:

  1. 스타일 - Obj-C는 동적이고 C++는 일반적으로 정적입니다.
  2. 둘 다 OOP이지만 솔루션은 다를 것이라고 확신합니다.
  3. 다른 개체 모델(C++는 컴파일 시간 유형 시스템에 의해 제한됨)

저에게 가장 큰 차이점은 모델 시스템입니다.Obj-C를 사용하면 메시징 및 내부 검사를 수행할 수 있지만 C++에는 강력한 템플릿이 있습니다.

각각의 장점이 있습니다.

그들은 완전히 다릅니다.목표 C는 C++보다 Smalltalk와 더 많은 공통점을 가지고 있습니다(글쎄요, 구문을 제외하면, 실제로).

다른 사람들이 말했듯이, Objective-C는 객체를 어떻게 생각하는지에 있어서 훨씬 더 역동적입니다.C++은 꽤 정적인 영역입니다.

객체 지향 언어의 Smalltalk 계통에 속하는 Objective-C는 Java, Python 및 기타 "표준", 비 C++ 객체 지향 언어와 매우 유사한 객체 개념을 가지고 있습니다.많은 동적 파견, 운영자 과부하 없이 메시지를 보냅니다.

C++는 그 자체의 이상한 동물입니다. 그것은 대부분 가계도의 스몰토크 부분을 건너뛰었습니다.어떤 면에서, 그것은 우연히 객체 지향 프로그래밍에 사용될 수 있는 상속을 지원하는 좋은 모듈 시스템을 가지고 있습니다.상황은 훨씬 더 정적입니다(예: 재정의 가능한 방법이 기본값이 아님).

목표-C는 C의 보다 완벽한 초집합입니다.In C 및 Objective-C 암시적 주조 위치void*구조 포인터로 이동할 수 있습니다.

Foo* bar = malloc(sizeof(Foo));

C++는 다음이 아니면 컴파일되지 않습니다.void포인터가 명시적으로 캐스팅되었습니다.

Foo* bar = (Foo*)malloc(sizeof(Foo));

이것과 일상적인 프로그래밍의 관련성은 전혀 없습니다. 그저 재미있는 사실입니다.

Obj-C는 언어 자체에서 훨씬 더 동적인 기능을 가지고 있는 반면, C++은 일부 동적인 기능을 가진 컴파일 타임 기능에 더 중점을 둡니다.

에서 C++ 매개 변수 다형성은 컴파일 시 확인되는 반면, Obj-C에서 매개 변수 다형성은 동적 디스패치를 통해 달성되며 컴파일 시 확인되지 않습니다.

Obj-C는 본질적으로 매우 역동적입니다.런타임 동안 메소드를 클래스에 추가할 수 있습니다.또한 수업을 보기 위해 런타임에 자기소개를 합니다.C++에서 클래스의 정의는 변경될 수 없으며 모든 내부 검사는 컴파일 시간에 수행되어야 합니다.Obj-C의 동적 특성은 함수 맵(또는 유사한 것)을 사용하여 C++에서 달성될 수 있지만, Obj-C에서보다 여전히 더 장황합니다.

C++에서는 컴파일 시 수행할 수 있는 검사가 훨씬 많습니다.예를 들어, 변형 유형(예: 유니온)을 사용하면 컴파일러가 모든 사례를 기록하거나 처리하도록 강제할 수 있습니다.따라서 문제의 가장 중요한 경우를 처리하는 것을 잊지 않습니다.그러나 이러한 모든 검사는 컴파일할 때 대가를 치릅니다.Obj-C는 C++보다 컴파일 속도가 훨씬 빠릅니다.

언급URL : https://stackoverflow.com/questions/2445050/how-different-is-objective-c-from-c

반응형