C++ 에서 구조체는..

맹고이의 이미지

C++를 배우고 있는 초보입니다..

구조체를 만들어보다가 테스트를 해봤는데요..

멤버함수도 만들어지고.. 생성자도 만들어지네요-_-a

그럼 C++에서 구조체랑 클래스는 차이가 없는건가요?

제가 생각하기에..

구조체는 기본적으로 access specifier(책이 영어라..-_-;; )가 public이고

클래스는 private인게 차이인듯..-_-a

뒤부분의 내용은 아직 안배워서 여기까지밖에 생각못하겠네요..

C++에서 구조체랑 클래스의 차이점을 가르쳐주세요..

wind772의 이미지

음..현재 제가 공부한데까지 봤을때..차이점은
<구조체> 단지 데이터 타입 -_-;;
<클래스> 함수 + 데이터
차이점은 클래스에 있는 상속과 멤버변수&함수 보호(private)..아직 이것밖에 모르겠군요..헤헷^^
음...요즘들어 클래스로만 돌아가는 플그래밍이 가능하다는 것을 느끼는 중입니다..-_-

===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.

pynoos의 이미지

둘의 차이는 기본 값이 접근 기술자(?)의 디폴트값 차이 외에는 없습니다.

굳이 따지자면... naming decoration(mangling)의 차이나는 것 외에는 없겠지요..

운형의 이미지

구조체는 데이터만 담는것.

클래스는 데이터와 이 데이터를 헨들링하는 메소드를 같이 담는것.

그런데...

클레스중에 접근 메소드를 빼고 모든 데이터를 퍼블릭으로 설정해노으면

구조체와 같아지네요.

구조체의 확장형이 클래스라고 보시면 무리 없을겁니다.

Do you think that's the air you are breathing now?

pynoos의 이미지

class/struct 안에 method를 선언할 때, 그것은 class안에 위치하는 것처럼 느껴지지만,
사실 그렇게 생각하시면, class의 크기에 영향을 주는 것 같은 느낌이 들지요.

사실 class/struct 안에 선언된다는 것은, 기본적으로는 함수의 scope를 그 class안에 둔다고 생각하시면 됩니다. 따라서, 변수 선언과 함수 선언은 크기에 영향을 주는 면에서는 "담는다"라는 말을 사용하는 것은 사실 어색합니다.

virtual function 을 사용했을 때, 증가되는 사이즈도 사실 function이 그 안에 들어가기 때문이 아닙니다. virtual function을 관리하기 위한 table pointer가 추가 되는 것이지요.

맹고이의 이미지

wind772 wrote:
음..현재 제가 공부한데까지 봤을때..차이점은
<구조체> 단지 데이터 타입 -_-;;
<클래스> 함수 + 데이터
차이점은 클래스에 있는 상속과 멤버변수&함수 보호(private)..아직 이것밖에 모르겠군요..헤헷^^

구조체에도 함수+데이터로 구성이 가능하길래 질문을 드렸습니다만..
접근자(?)변경도 가능하고..
아직 해보진 않았지만..구조체도 상속이 될것같은데..
집에가면 해봐야겠습니다..-_-
unipro의 이미지

C++의 struct는 C의 그것의 기본 성질을 물려받은 객체입니다.

C의 struct의 데이타멤버들은 -C++의 용어로 말하자면-퍼블릭한 속성을 가지고 있습니다. 그래서 C++에서는 C의 struct의 속성을 기본적으로 받아서 데이타멤버들의 기본 속성이 퍼블릭이며 그것은 객체를 표한합니다. 즉 데이타멤버와 멤버함수를 가지는 객체를 말합니다. 엄연히 C의 struct와 다르지만, 한편으로는 비슷합니다. 오히려 Class와 기본 속성만 다를뿐, 다른 이름의 같은 의미라고 생각하면 됩니다.

내 블로그: http://unipro.tistory.com

eklee의 이미지

사실...C++에와서 이개념은..많이 달리집니다.

다른거는 딱! 하나 밖에 없습니다.

상속시 접근 제한자 private,protected 을 클래스에서는 쓸수있고...구조체는 모두 public입니다.

매소드? 구조체도 가질수 있습니다.

marzok의 이미지

C++에서 struct를 가지고 인터페이싱도 되는지요?

그게 되면 C에서도 된다는 소리 아닌가요?

그게 된다면 간단한 셈플 코드좀 보여주세요.

pynoos의 이미지

interfacing이라는게 pure virutual class를 말하는 것인가요?

C++이 struct 를 쓰지만, 사실은 class 라고 생각하시면 되구요,
C에서는 그 안에 함수조차 선언이 되지 않습니다.
함수 포인터를 갖는 변수면 몰라도....

C의 struct 는 단지 변수의 집합일 뿐, scope 개념도, this pointer의 개념도 없는 단순한 변수 집합체일 뿐입니다.

샘플.. 당근 없지요.... ^^

맹고이의 이미지

marzok wrote:
C++에서 struct를 가지고 인터페이싱도 되는지요?

그게 되면 C에서도 된다는 소리 아닌가요?


C 컴파일러랑 C++컴파일러랑 달라서..

이름만 같은 struct이지 다른것 같네요..(그냥 제 생각-_-)

인터페이싱은.. 먼지 모릅니다-_-a

그리고..

C++에서 struct랑 class는 거의 같지만 개념적으로 달라서

사용하는 방식이나 용도에서 차이가 난다고..

전 이렇게 머리속에 정리하기로 했습니다-_-a

...맞을까요?

김수기의 이미지

여러가지 C와 plus plus간의 차이점들을 말씀해주셨지만.... 그래도 가장 큰 차이점은 바로 객체 지향이라는 겁니다... C++ 애서는 데이터를 위주로 모든것이 데이터에 관련되어 촛점이 맞추어 졌지요... C에서는 걍 흐름 이죠.. 그래서 데이터를 다루는데... 는 별 차이가 없을지 몰라도 개선사항이 발생하거나 했을때에는 머리가 상당히 아파지는 겁니다... 한번 프로그램을 짜고 끝낸다면 아무것으로 해도 상관이 없습니다.. 하지만 프로그램이라는게 어디 그렇습니까...?
변동사항이 무지하게 발생하죠... 그때 마다... 적절하게 대처해야 합니다..
결국 데이터를 가공해서 출력하는게 프로그램인데... C같은 경우 손을 많이 보거나.. 아님 전체를 다시 설계해야 하는 사태가 종종 발생합니다... 여기에 따르는 시간 경비 노력... 말 안해두 알죠?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.