C++

C++에서 영 초기화’(또는 기본값 초기화)라는 것을 들어보셨나요?

저는 이것을 근래에 알게 되었습니다. 그 전에는 이런 것이 있다는 것을 전혀 알지 못했습니다.

 

영 초기화라는 것은 클래스(구조체)의 멤버들을 0으로 초기화 시켜주는 것을 말합니다.

 

#include <list>

#include <iostream>

using namespace std;

 

struct Item

{

        int ItemCd;    // 아이템코드

        int BuyMoney;  // 판매금액

};

 

void main()

{

        // 일반적인 할당 방식 입니다.

        Item* item1 = new Item;

      

        // Java C# 처럼 할당 합니다. 이렇게 하면 영 초기화가 됩니다.

        Item* item2 = new Item();

        // 물론 정적 할당도 됩니다.

        Item item3 = Item();

 

        cout << item1->ItemCd << endl;

        cout << item2->ItemCd << endl;

        cout << item3.ItemCd << endl;

}

 

결과

-842150451

0

0



그럼 구조체 Item vector와 같은 것이 있으면 어떻게 될까요 ?

vector가 있으면 영 초기화가 되지 않습니다.

 

struct Item

{

        list< int > Datas;

        int ItemCd;    // 아이템코드

        int BuyMoney;  // 판매금액

};

 

void main()

{

       Item* item1 = new Item;

       Item* item2 = new Item();

       Item item3 = Item();

 

        cout << item1->ItemCd << item2->ItemCd << item3.ItemCd << endl;

}

 

결과

-842150451

-842150451

-842150451



만약 클래스(또는 구조체)가 다른 클래스를 포함한다면 어떨까요?

영 초기화가 됩니다.

struct Skill

{

        int SkillCd;

        int SkillKind;

};

 

struct Item

{

        Skill skill;

        int ItemCd;    // 아이템코드

        int BuyMoney;  // 판매금액

};

 

void main()

{

        Item* item1 = new Item;

        Item* item2 = new Item();

        Item item3 = Item();

 

        cout << item1->ItemCd << endl;

        cout << item2->ItemCd << endl;

        cout << item3.ItemCd << endl;

}

 

결과

-842150451

0

0

 

 

그러나 Skill 구조체가 list와 같이 영 초기화를 할 수 없는 것을 포함하고 있다면 영 초기화가 되지 않습니다.

 

 

 

2년 반전부터 정기적으로는 C++ 공부를 하지 않았는데 요즘 다시 해야될 필요성을 느끼고 하고 있습니다. 생각해보니 예전보다 실력이 올랐기 때문에 지금 C++ 공부하면 예전보다 더 확실하고 빠르게 공부할 수 있는데 왜 안하고 있었는지 약간 의문스럽네요 ^^;;



신고
by 흥배 2009.03.21 12:32
C++, STL

한빛미디어 웹사이트에 "About STL"이라는 제목으로  C++의 STL 관련 글을

연재 하고 있습니다.


현재 3회까지 연재 되었습니다.

http://network.hanb.co.kr/view.php?bi_id=1563

http://network.hanb.co.kr/view.php?bi_id=1567

http://network.hanb.co.kr/view.php?bi_id=1572


3회까지는 Template에 대한 것이고 이후는 STL에 대해서 본격적으로 설명합니다.


이 글은 초보 프로그래머를 대상으로 하고 있습니다(정확하게는 C++ 책을 한권 정도

본 사람).

 


신고
by 흥배 2009.03.21 12:29
C++

http://jacking.springnote.com/pages/1822028

에 번역해 놓았습니다.^^


신고
by 흥배 2009.03.21 12:28
C, C++

강컴에서 C++ 책을 검색을 하다가 우연찮게 2008년 1월에서 10월9일까지 한국에서 출간된 C/C++ 책

리스트를 보니 생각보다 많이 출간된 것 같더군요.


제가 처음 프로그래밍을 배울 때는 C/C++이 주류 언어로 이때는 C 언어가 프로그래밍 언어에서 왕좌 자리에 있었고 C++이 그 자리를 뺏아아 가는 시기였던 것같습니다.

그런데 요즘은 점점 C/C++ 언어는 그 자리를 자바나 C#, 스크립트 언어 등에 자리를 내어주고 있습니다. 대학교에서도 C/C++ 수업을 별로 하지 않고 잘 모르는 대부분의 대학생들이 잘 모른다고 하더군요.


2008년에 출간된 책을 보니 대다수가 초급자를 위한 책이 대부분이더군요.

중고급자용 책이 나오지 않아서 아쉽지만 그래도 초급자 책이라도 이정도 출간되어서 나름 다행이라고 생각합니다.


아직 게임업계에서는 C++이 주류 언어이고 최소한 몇년은 더 주류 언어로 있을 것같지만 언제까지일지 궁금하기도 합니다.


아래는 강컴에 등록된 2008년 C/C++ 출간 도서 리스트입니다.


1. C언어로 배우는 8051

2. 행복해지는 C & C++

3. Windows Cryptography with C++

4. 화공전산 (C,C++,MATLAB)

5. C++로 시작하는 객체지향 프로그래밍 (핵심요약판)

6. C++ 프로그래밍 완전 정복

7. C++를 이용한 크로스 플랫폼 개발

8. C언어 100문 / 100답

9. C 프로그래밍 완전 정복

10. 멀티미디어 게임 개발을 위한 VISUAL C++ 게임 제작 프로젝트 따라하기

11. Component Development with Visual C++ & ATL

12. C언어 윈도우즈 API 프로그래밍

13. Data Structure & Algorithm with c/c++

14. C 프로그래밍 파워 업그레이드

15. Practical C Pointer

16. 비주얼 c++ MFC입문

17. 비기닝 ANSI C++

18. VC++와 MFC를 이용한 Multimedia Programming

19. ROBOTC로 접근하는 C프로그래밍 입문

20. 씽킹 다이어리: C프로그래밍으로 가는 여행

21. Let's go C : C프로그래밍과의 여행

22. Blog2Book 임베디드 프로그래밍 C 코드 최적화

23. 단계적으로 배우는 C&C++ 언어의 완성

24. C언어 프로그래밍

25. NEW C 언어 입문 : 초급자편

26. 제대로배우는 C Language Programming

27. 친절한 김샘의 함수 포인터 강의 : C/C++

28. New C Programming with a workbook

29. c로 쓴 자료구조론 2/E

30. 카드게임으로 배우는 C++ 프로그래밍

31. 예제로 쉽게 풀어 쓴 C 기초 프로그래밍

32. IT COOKBOOK for Beginner, C++ 기초

33. OK! C Programming

34. iT Energy C

35. 예제로 쉽게 배우는 Visual C++

36. C로 배우는 프로그래밍 기초 2/e


10 번과 30번의 책이 흥미로운 제목을 가지고 있는 책인데 이 책들의 목차를 보니 10번은 주로 DirectSound와 DirectDraw, DirectShow를 중심으로 설명하고 마지막에 이것들을 이용하여 게임을 만드는 예제가 있고, 30번은 C++의 기초부터 설명하면서 사이사이에 카드 게임에 대한 이야기가 있는 것 같더군요.


신고
by 흥배 2009.03.21 12:23
C++
스프링노트에 번역하여 올려 놓았습니다.

http://jacking.springnote.com/pages/1634936
신고
by 흥배 2009.03.21 12:02
C++
출처 : http://www.artima.com/cppsource/top_cpp_books.html


The C++ Programming Language by Bjarne Stroustrup


Effective C++ by Scott Meyers


Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides


International Standard for C++


Modern C++ Design by Andrei Alexandrescu,

신고
by 흥배 2009.03.21 03:08
C++
2006년 1월 11일에 네이버 블로그에 적은 글입니다.


C++의 설계와 진화 라는 책을 보고 있습니다.
( 책 사진은 http://blog.naver.com/jacking75/140009579158   )

이 중 첫 부분의 'C++의 이전의 역사' 챕터를 보았습니다.
1.1 Simula와 분산 시스템
1.2 C와 시스템 프로그래밍
1.3 개인적인 배경


이중에서 1.3에서 나오는 내용을 간추려 보았습니다. 이것을 보면 C++의
특징에 대해서 좀 이해와 C++을 만든 비얀스트롭(맞나 -_-;;)의 사상을
알수 있으리라 생각합니다. 그리고 이전에 자바와 C++의 비교하는 것을
의미 없는 것이라고 이분이 이야기 했는데 그 이유도 알것 같습니다.
자바와 C++의 사상 자체가 틀린것 같더군요.
자바는 OOP가 최선이라고 생각하여 이것을 프로그래머들에게 강제한다면
C++은 개개인의 프로그래머의 생각을 존중하여 개인의 생각을 최대한
존중하여 다양한 방법으로 프로그래밍을 할 수 있게 만들었다고 생각합니다.


아래가 제가 대충 정리한 내용입니다.
------------------------------------------------------

C++의 전체구조는 나의 일반적인 세계관이 반영 되고 있을 것이다.
물론 C++의 개개의 부분은 컴퓨터 과학의 정밀한 개념에 의해 만들어 졌지만

나의 전공은 수학(순수수학과 응용수학)으로 나의 덴마크 박사 칭호의 타이틀은
'수학 및 컴퓨터 과학'으로 되어 있다. 나는 수학의 아름다음도 좋지만 목적 없는
추상적인 진리나 미(美) 보다도 문제 해결을 위한 실용 툴로써의 수학에 마음이 기울어진다.
컴퓨터나 프로그래밍 언어에 대한 나의 관심도 역시 실용적인 관심이다.

나의 장년(25년 이상)의 취미는 역사이다. 또 학생시대 이후부터 철학 공부에 많은 시간을
소비 하였다...세계에는 다양한 사상이 있는 중에서 나에게는 관념론 보다 경험주의가 가장
잘 맞다.

집단의 존중에 그 집단에 속하는 것에 대한 존중이 포함 되지 않는다면 그것은 전혀 존중
할 수 없다. C++ 설계의 많은 부분이 강제에 대한 나의 혐오가 근간이 되고 있다.
인류 역사의 최악의 참사는 '이것이 옳은 것이므로 이것을 해!' 라고 말하는 이상주의자의
강제에서 생겨난다.

나는 프로그래머들에게 선택을 자유를 주고 싶다.

나는 이론이랑 논리만으로 기초를 두는 결정이 싫으므로 그 것은 나의 문학 취미에도 나타나고
있다. 이렇게 말하는 의미는 C++는 마틴 A 한셈, 알베르 카뮤, 죠지오웰 등 컴퓨터를 한번도
본적이 없는 소설가랑 엣세이스트들의 영향을 크게 받고 있다. 또 컴퓨터 과학자 중에서는
David Gries, Don Knuth, Roger Needham 같은 수학자로 있기 이전에 인간으로서 상식인으로 있는 사람들에게 많은 영향을 받고 있다.

나는 나의 기호에 맞지 않는 기능을 C++에서 뺄려고 하는 것에 대해 언제나 그것을 생각하지 않을려고 한다. 왜냐하면 나의 생각을 타인에게 강제 하는 자격이나 권리는 누구에게도 없기 때문이다.
이론만을 순수하게 추구하여 다양한 생각을 '오랜되었다', '안된다', '확실하지 않다'고 말하면서
깔아 뭉게었다면 C++은 훨씬 일찍 완성되었을 것이다. 그러나 시간의 가치 보다도 사람의 가치가
훨씬 높은 경우가 많다. 사람의 다양한 생각을 허용하고 받아들여 하나의 것을 여러가지 방법으로
완성하는 것이 나에게 있었어는 훨씬 가치가 크다.

나는 새로운 기술을 사람들에게 추천해 그 가치를 설득할 때, 무리하지 않고 천천히 하는 것을
좋아한다. 사람들을 세뇌하는 테크닉이 있다는 것을 알고 있지만 그런한 테크닉은 기본적으로
위화감을 느낀다.

나는 문제 해결을 위해서 C++을 설계 하였지 무언가를 실증하기 위해 만든 것이 아니다. C++은
유저에게 봉사 하는 것에 의해서 성장했다. 변화를 조금씩 축적하는 것에 의해 세상을 좋게
하는 것은 가능하다.

나는 사람들에 도움이 된다고 믿는 기술이나 아이디어의 보급에 이제부터라도 힘을 쏟고 싶다.
우리들의 기술이랑 생각에 접근성을 높이고 그것들의 전문가의 도구가 아닌 사회의 도구로
하는 것은 과학자랑 지식인의 의무이다. 물론 사람이 이상의 회생자로 되어서는 안된다. 나는
협소한 프로그래밍 언어에 의한 단 하나의 설계 스타일을 사람들에게 강제하고 있는 것이 아니다.
사람마다 사물의 생각과 일을 하는 방법이 굉장히 다양하므로 '이것이 보통적인 최선'이다고
칭하는 특종의 스타일을 밀어 붙인다면 발생하는 것은 피해이다. C++은 의도적으로 다양한
스타일을 실현 할 수 있는 스타일로 되어 있다. 그것은 '단 하나의 옳은 방법'를 강제하는
언어가 아닌다.

프로그래머에게 있었어 프로그래밍 언어가 가장 중요한 도구이다. 그러나 프로그래밍 언어는
세계의 극히 작은 일부분에 지나지 않으므로 그렇게 요란을 떨 것은 아니다. 이를테면 세계의
전체를 의식하고, 균형 있는 시각을 유지하는 것이다. 그리고 가장 중요한 것은 유머와 센스를
잊지 않는 것이다. 메이져 언어 중에서 가장 많은 호사가들이랑 죠크의 근본이 되고 있는
것이 C++ 이다. 그것은 결코 우연이 아니다.
-------------------------------------------------

이전에 사 놓고 요즘 'Art of UNIX Programmin'를 다 보고 이른바 잠자기 용 책으로
보고 있는데 저의 주력 언어인 C++에 대해 제가 모르고 있던 부분이 나와서
흥미롭네요....그래도 책에 글자만 있었어 잠은 잘 옵니다..^^;;

신고
by 흥배 2008.03.20 23:23