2014-06-13 4 views
30

구조체와 클래스의 차이에 대해 꽤 혼란 스러웠습니다. 같은 것을 사용하는 것처럼 보였습니다. 내가 봤어 유일한 차이는 봤어 유일한 구조체는 기본적으로 공개 멤버가 클래스의 개인 회원이 기본적으로있다. 그러나 제 강사는 struct가 멤버 함수를 포함 할 수 없다고 말했습니다. 하지만 사람들이 구조체에 멤버 함수를 포함하는 인터넷에서 많은 스레드를 보았습니다. 특히 이렇게하는 것이 좋습니다.C++ struct에 멤버 함수가 있습니까?

내 강사는 구조체가 정의에 따라 함수를 가질 수 없다는 점을 강조하는 것처럼 보이므로 어떤 일이 벌어지고 있습니까? 내가 생각할 수있는 유일한 것은 컴파일러가 구조체 내의 함수를 다른 것으로 변경하여 기술적으로 함수를 포함하지 않는다는 것입니다 ... 이러한 모순에 대한 명확한 대답이 있습니까?

+7

아마 C를 의미 할 수도 있습니다. – chris

+23

이것이 C++ 코스라고 생각되면 즉시 삭제하십시오. – aschepler

+3

강사를이 문서로 안내하십시오. https://isocpp.org/files/papers/N3797.pdf - C++ 표준의 작업 초안, 9 장. class와 struct라는 단어는 대부분 같은 의미로 사용됩니다. 3 단락에는 멤버 함수가있는 구조체의 예가 있습니다. –

답변

6

귀하의 강사는 실제로 C++에 대해 이야기하지 C.

그것은 코드에서 자신에게 이것을 증명, 또는 The C++ Programming Language을 선택하고 구조체를 조회 하찮게 쉽게하는 가정 명백히 잘못이다.

32

내가 봤던 유일한 대답은 구조체에 기본적으로 공개 멤버가 있고 클래스에는 기본적으로 개인 멤버가 있다는 것입니다.

네, 맞습니다. 또한 구조체의 기본은 기본적으로 공개적으로 상속되지만 클래스의 기본은 기본적으로 개인적으로 상속됩니다.

함수를 구조체의 멤버로 선언하는 것은 명시한 차이를 제외하고 클래스의 멤버로 함수를 선언하는 것과 정확히 동일한 의미를 갖습니다. 각각의 경우에 회원 기능이라고합니다.

+5

정답입니다. 클래스와 구조체 사이의 * ONLY * 만 기본 표시 유형입니다. – user3344003

2

C++ structsdefinitely have member functions. 반면에 C 구조체는 매우 다른 짐승입니다. 기본적으로 특정 인디 케이션에 대한 이름과 유형 정보를 제공하는 배열입니다.

1

언어에 의해 허용되는 것이 단지 좋은 생각이라는 것을 의미하지는 않습니다. 기술적으로 C++ 구조체는 함수를 포함 할 수 있지만 구조체 데이터 형식의 원래 의도는 함수를 포함하는 것이 아니라고 생각합니다. 밀접한 관계로 데이터에 작용하는 데이터와 로직을 정의 할 수 있도록 클래스 유형을 도입하여 데이터에 대한보다 건강한 인터페이스를 촉진하는 것이 주요 목적 이었습니까?

+1

이것은 분명히 거짓입니다. Stroustrop 그 자신은 많은 경우에 많은 것을 말했다. 구조체와 클래스는 다른 답변에서 언급 된 것을 제외하고는 동일합니다. –

+1

그렇다면 왜 언어에 클래스를 추가해야합니까? 왜 구조체를 사용하지 않는 것이 좋을까요? C++의 큰 팬이 된 적은 한번도 없었습니다. 너무 복잡한 것처럼 보였으므로 여러 가지 방법으로 발을 쏠 수있었습니다. 이 언어에서 거의 동일한 두 개의 키워드를 사용하는 것은 나쁜 생각처럼 보입니다. 확실히 새로운 언어가이를 선택하지 않았습니다. 파이썬은 분명히 올바른 방법을 제공하는 경향이 있으며 유지 보수가 용이 한 코드를 제공합니다.아마 Stroustrop은 그들을 목적에 거의 동일하게 만들었다. .. 그렇다면, 나는 말한다, "나를 혼란시키기 때문에 그에게 수치스러워한다." – Travis

+0

http://www.thealmightyguru.com/Humor/Docs/ShootYourselfInTheFoot.html – Travis

관련 문제