클래스 대 클래스


12

C ++ 및 기타 영향을받는 언어에는 Structure ( struct) 라는 구조가 있고 다른 언어 는 class. 둘 다 함수와 변수를 보유 할 수 있습니다. 몇 가지 차이점은 다음과 같습니다.

  1. 클래스에는 힙에 struct메모리가 제공되고 스택에 메모리가 제공됩니다 (비고 : C ++에서는 잘못된 것이지만 OP가 "영향을받는 언어"라고하는 방식에서는 정확할 수 있습니다)
  2. 클래스 변수는 기본적으로 비공개 struct이며 공개 변수입니다.

내 질문은 : struct어떻게 든 수업에 버려 졌습니까? 그렇다면 왜 그렇습니까? 위의 차이점 외에도 structa는 클래스와 동일한 작업을 수행 할 수 있습니다. 그렇다면 왜 포기합니까?


포기함으로써 나는 왜 하나가 다른 것보다 사용되는지를 의미했다.
prometheuspk

당신의 질문은 내가 생각하는 이것 자체에 답합니다.
Umair A.

3
클래스와 구조체의 차이점은 언어에 따라 다릅니다. C ++의 일부 레슨은 실제로 C #에 적용되지 않습니다.
Job

6
어. C ++에서는 스택 또는 힙에 객체를 할당 할 수 있습니다. 네가 원하는 어디든지.
jojo

8
잘못 됐어 스택 대 힙은 차이와 관련없습니다 .
Aaronaught

답변:


11

전혀 버리지 않습니다. 실제로 C #과 같은 최신 언어조차도 class여전히 많은 것을 제공합니다 struct. 다른 것을 선택하는 것이 유용한 경우에 관해서는이 기사를 참조하십시오.

클래스와 구조 중에서 선택

MSDN 기사에서 인용 한 내용 :

유형의 인스턴스가 작고 일반적으로 수명이 짧거나 다른 객체에 일반적으로 포함되는 경우 클래스 대신 구조를 정의하는 것이 좋습니다.

유형에 다음 특성이 모두없는 한 구조를 정의하지 마십시오.

  • 기본 유형 (정수, 이중 등)과 유사한 단일 값을 논리적으로 나타냅니다.
  • 인스턴스 크기가 16 바이트보다 작습니다.
  • 불변입니다.
  • 자주 박스에 넣을 필요는 없습니다.

4
이 답변은 실제로 .Net / C # struct / class 의미가 C ++과 다르므로 오도됩니다 : 언어에 따라 동일한 이름을 사용하지만 의미가 다릅니다! C ++에서는 struct와 class 사이에 거의 차이가 없으며 질문은 첫 번째 점에서 완전히 잘못되었습니다 .c #과 D에는 있지만 c ++에는 맞지 않습니다. 따라서 .Net에 관한이 기사의 링크는 실제로 잘못되었습니다. C ++이 아닙니다!
클라 임

@Klaim 기술적으로는하지 못했습니다 C #에 대한 중 (구조체가 힙에있을 수 있습니다) C #에서 중요한 구분이 값 의미 및 참조 의미, 그것은 아무것도 값이나 참조를 가질 수로 C + +를 필요로하지 않는 것을 구별 사이
JK합니다.

17

당신은 C ++에 대해 잘못 알고 있습니다 : class와 struct의 유일한 중요한 차이점은 기본 액세스 지정자 차이점입니다. 구조와 클래스는 모든 의도와 목적 동의어에 대한 것입니다. 구조체는 C와의 하위 호환성을 위해 유지됩니다.


7
뿐만 아니라. Struct는 하나의 객체에 많은 데이터를 덤프하고 그에 동작을 추가하지 않으려는 경우에 좋은 선택입니다.
quant_dev

2
@ Quant : 구조체를 사용하는 끔찍한 이유입니다. 나는 그 의견이 뺨에 혀 있기를 바란다.
Aaronaught

1
@Aaronaught 왜? struct 사용법에 대한 나의 견해는 상당히 표준 적입니다. 예를
들어이

1
@Aaronaught 그러면 여러 값을 어떻게 반환합니까? 제안 모델은 깨끗한 가격, 더러운 가격 및 발생한 지불액을 반환합니다.
quant_dev

1
@quant_dev-당신은 당신의 목적을 위해 구조체에 메타 의미를 붙이기로 결정할 수 있습니다 (전 C 프로그래머에게는 실제로 의미가 있습니다). 그러나 구조체와 구조체의 유일한 차이점은 변경하지 않습니다. C ++의 클래스 키워드가 기본 액세스입니다.
Joris Timmermans

2

언어 D는 클래스와 구조체를 더 크게 구분했습니다.

d의 구조체는 값으로 전달되는 enum + union 설정을 사용하지 않으면 상속 할 수있는 옵션없습니다 ( 값에 의해 전달되는 경우에는 상속 옵션없습니다 )

클래스는 우리가 익숙한 것과 같습니다 : 가상 함수, 힙 할당, (단일) 상속, ref에 의해 전달됨

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.