E D R , A S I H C RSS

02_C++세미나

1. 강사 - �오 한 마디씩^^;

  • ê°•ì�¸ìˆ˜ : 얘들아 잘해보ìž�~^^
  • ì�´ë³‘í�¬ : 설마 ì�´ 5명ì�´ 다 하ìž�는 ê±´ ì•„ë‹�테구..ã…¡.ã…¡ 암튼 열심히 해보세
  • ì�´ì°½ì„­ : ì�´íž›. 재밌게 설명해줘야ì¥�..캬캬.. ê·¼ë�° 나ë�„ 강사 ë§žì•„? í��í��.. 하고ì‹ì§€ë§Œ 강사가 너무 ë§Žì�€ê±° 아닌가 해서..^^;
  • ì�´ìƒ�ê·œ : 나 ZP 아닌ë�° í•´ë‘�ë�˜?-_-;; 오프ë�¼ì�¸ìƒ�ì—�서 ì§�ì ‘ ê°•ì�˜ë�„ 가능..ã…‹ã…‹ 강사로 초빙 바람..ã…‹ã…‹
    DeleteMe) 너 �제 ZP야~
  • 신재ë�™ : í•™ì›� 강사 2ë…„ì�˜ 경력ì�„ 무기로...-,-V
  • 남ìƒ�협 : 난 꼽사리.... ã…¡ã…¡;;
  • ì�´ì„ í˜¸ :

2. 대�

  • c++ì�„ 듣는ë�°ë�„ 잘 ì�´í•´ì•ˆê°€ê³  아리까리한 02
  • 알아ë�„ 다시 듣고 ì‹ì�€ 02
  • 강사들ì�´ ì�´ìƒ�한 소리 하면 ë§�ë ¤ 줄수 있는 선배나 ë�™ê¸°

3. 강� �정

  • 4ì›” 18ì�¼ 목요ì�¼ 7시 과방 앞 ì§‘í•©

4. 강� 내용

4.1. 기본 ìž…ìœë ¥

  • cout

~cpp 
#include <iostream>
using namespace std;

int main()
{
    int a=3;
    cout<<"ZP 파�팅!\n";
    cout<<a<<endl;
    return 0;
}
  • cin

~cpp 
#include <iostream>
using namespace std;

int main()
{
    int age;
    cout<<"너 몇살�야?";
    cin>>age;
    cout<<age<<"살�구나";
    return 0;
}

4.2. 변수와 구조체

  • 기본형(int,long 등등)

~cpp 
int a=5;
long b=50000000;
bool c=true; // or false
double d=4233.423423;
  • 확장형(구조체,í�´ëž˜ìФ 등등)

~cpp 
// 구조체는 사용� 정� ��터 형�다. 구조체를 설정해 놓으면 그것� int나 long같� 기본 ��터형처럼 쓸수있다. 예제를 봅시다.
struct Zealot
{
    int HP;        // 멤버들
    int Shield;
    bool MP;
    bool BalUp;
    int Damage;
    ....
    ....
}
// � 질롯 구조체가 만들어졌습니다. �제 Zealot��는 단어를 int나 long처럼 쓸수 있는거지요.
Zealot z1;
// �제 질롯형� 변수 z1� 만들어졌습니다. �제 z1� 멤버를 설정해줘야겠죠? 멤버� 접근할때는 .� �니다.
z1.HP=100;
z1.Shield=60;
z1.MP=false; // 질롯� 마법� 못쓴다.
z1.BalUp=false; // 질롯� 첨� 나올때는 달리기업� 안�어있다.
z1.Damage=....

4.3. 반복문

  • ì�¼ë°˜ì �으로 몇번 반복 해야할지 알때는 for, 잘 모를떄는 whileì�„ 쓴다.
  • for

~cpp 
// 1�서 100까지 합� 구하는 프로그램
#include <iostream>
using namespace std;

int main()
{
    int sum=0;
    for(int i=1;i<=100;i++)
    {
        sum+=i;
    }
    cout<<sum;
    return 0;
}

  • while

~cpp 
// 1�서 100까지 합� 구하는 프로그램
#include <iostream>
using namespace std;

int main()
{
    int count=1,sum=0;
    while(count<=100)
    {
        sum+=count;
    }
    cout<<sum;
    return 0;
}

4.4. 조건문

  • if-else

~cpp 
#include <iostream>
using namespace std;

int main()
{
    int age;
    cout<<"너 몇살�야?";
    cin>>age;
    if(age>=50)
        cout<<"나� 많네요";
    else
        cout<<"나� �네요";
}
  • switch-case

~cpp 
#include <iostream>
using namespace std;

int main()
{
    int age;
    cout<<"몇번으로 ��까?";
    cin>>age;
    switch(age)
    {
    case 1:
        cout<<"1번";
        break;
    case 2:
        cout<<"2번";
        break;
    default:
        cout<<"...";
    }
}

4.5. ë°°ì—´

  • ê°™ì�€ 타입ì�˜ ë�°ì�´í„°ë¥¼ 묶어서 표현해줄수 있는 것.

~cpp 
// int형 ��터 5개를 저장하려면
int a[5]={1,2,3,4,5};
int a[]={1,2,3,4,5};
int 

4.6. ��터

  • í�¬ì�¸í„°ëž€?
��터란 무엇�� 하면... ��터는 변수�다. (변수가 무엇�지는 알꺼�고 본다.)
아주 중요한 사실�니 꼭 기억하기 바란다.

그럼 ��터가 변수�긴 한� 과연 무엇� 저장하는 변수란 ��가??
int로 정�한 변수는 정수를 저장하는 변수�고,
double로 정�한 변수는 소수�� 있는 수를 저장하는 변수�고,
char로 정�한 변수는 문�를 저장하는 변수��...
과연 ��터는 무엇� 저장하는 변수�가??

��터는 바로 변수� 메모리 주소를 저장하는 변수�다. (그러므로 ��터는, 그 ��터가 어떤 종류� 변수� 주소값� 가지��� 따�서 변수� 가짓수 만�� 변형� 있다. 왜 여러 종류� ��터가 필요한지는 나중� ��터� 연산(물론 ��터� 변수�므로 연산, 비�, 대입 등 거� �반변수�서 가능한 모든 것� 가능하다)�서 설명하겠다.)
변수� 어떤 값� 저장한다는 것� 실제로 그 변수� 대�하는 메모리� 저장하는 것�다.
"� 컴퓨터는 메모리가 256MB"�다 �고 할때� 그 메모리를 ��다.
그 256MB나 �는 메모리�서 그 값� 저장�는 위치가 메모리� 주소�다.
256MB나 �는 메모리�서 변수� 대�하는 메모리� 위치가 변수� 메모리 주소�다.
�� 대해서는 하드웨어�� 컴퓨터� �작�리� 대한 체계�� �해가 필요하지만 나중� 기술하�� 하겠다.

  • Why Pointer
그렇다면 대체 왜 �다지� 복잡한 ��터를 쓰는가? 내가 알기로는 ��터는 C 와 C++ 언어�서만 존재하는 기능�다. �시� 사람들� C 와 C++ 를 어려워하는 �유�기� 하다. 왜 사람들� C �만 있는 기능� ��터를 어려워 하는가. 그건 ��터를 �야만 하는 어떤 '�유' 가 있는게 아�까? 재미있게�, 사람들� C 언어를 좋아하는 �유가 '��터� 강력함' 때문� 경우가 많다.

여러가지로 �� 많았는� �쯤�서 ��터� 쓰임� 대해 간략하게나마 설명하겠다. ��터� �론�� 정�는 무엇�가. 바로 '메모리� 주소를 가지고있는 변수'란 것�다. 그건, �시� ��터를 �용하면 그 해당하는 메모리로� �접�� 접근과 제어가 가능하다는 뜻�다. 그렇다면 ��터� 역활� 메모리로� �접�� 억세스가 �는것�고, 여기� ��터� 연산� 통해 거� 어셈블리언어� 가까운정�� 저수준 메모리 제어를 가능케 한다. 바로 그것� ��터� 존재�유�며 쓰임�다. �런 �론�� ��터� 쓰임 �고, �접�� 강함� 체험� �한다면, 여러분� �접 사용해볼것� 권한다.

  • í�¬ì�¸í„°ëŠ” 어떻게 만들까?
정수형 변수는 int를 사용해 만든다.
문�형 변수는 char를 사용해 만든다.

~cpp 
// �렇게 ��다..
int a; // 정수형 변수
char b; // 문�형 변수

그렇다면 ��터는 어떻게 만들까?
��터는 다�과 같� *만 쓰면 만들 수 있다.

~cpp 
int *a; // 정수형 변수� 메모리 주소를 저장하는 변수(정수형 ��터�고 함..)
char *b; // 문�형 변수� 메모리 주소를 저장하는 변수(문�형 ��터)
int *c1, *c2, *c2; // 여러개를 같� 만들�.. 모�다 *를 붙여야함.

다�과 같� 선언� 유효하다.

~cpp 
int* pi;
int * pi;
(int *) pi; /* �런 �으로 사용하면 좀� 명확하다. 정수� ��터�는. */

�렇게 만들면, a는(*a가 아니다. 정�할때만 *를 붙여야 한다. 사용할� a로 쓴다)
정수형 변수� 메모리 주소를 저장하는 ��터가 �고, b는 문�형 변수� 메모리 주소를
저장하는 ��터가 �다.

  • í�¬ì�¸í„°ì�˜ 사용
�제 ��터가 무엇�지� 알았고, ��터를 어떻게 만드는지� 알았다.
그럼 ��터를 어떻게 사용하는지 알아보기로 하�.
��터를 사용하는�는 �가지 연산�가 사용�다.
하나는 &�고, 다른 하나는 *�다.(여기서 *는 ��터를 만들때� *와는 다른 �미�므로 잘 구분하기 바란다.)

먼저 &� 대해 살펴보기로 하�.
&는 어떤 변수� 주소를 얻어내는� 사용�다. 어떤 변수가 있�때 그 변수 앞� &를 붙�면 그것� 그 변수� 메모리 주소가 �다.
예를 보면 쉽게 �해가 �거�고 본다.

~cpp 
int a;   // a는 정수형 변수
int *p;   // p는 정수형 변수� 메모리 주소를 저장하는 변수. (정수형 ��터)
p=&a;  // a� 메모리 주소를 p� 저장한다. (p는 정수형 변수� 메모리 주소를 저장하는 변수�므로...)

&는 �반�으로 정수형 변수나 문�형 변수 등과 같� ��터가 아닌 변수들� 대�으로 사용하지만... ��터를 대�으로 사용할 수� 있다.
처�� 강조했듯� ��터 역시 변수�기 때문�다. 그러한 경우� 대해서는 나중� 다시 알아보기로 하겠다.


다� *� 대해 알아보�.
(�해하기 힘들지� 모르니.. 아주 �~알 �기 바란다.)
*는 ��터를 대�으로만 사용�는 연산���, ��터� 저장�어 있는 메모리 주소� 보관�어 있는 값� 엑세스할때 사용한다.
무슨��지 �해가 안�면 10번만 다시 잘 �고, 다� 예를 보길 바란다.

~cpp 
#include <iostream>
using namespace std;

void main()
{
	int a;     // 여기 세줄� 앞�서 설명했다
	int *p;
	p=&a;

	a=10;                       // a� 10� 넣는다.
	cout << a << " " << *p << "\n";   // aì�˜ ê°’ê³¼ pì—� 저장ë�˜ì–´ìžˆëŠ” 메모리 주소ì—� ë³´ê´€ë�˜ì–´ìžˆëŠ” ê°’ì�„ ìœë ¥í•œë‹¤.
	*p=3;                      // p� 저장�어있는 메모리 주소� 보관�어있는 값� 3으로 바꾼다.
	cout << a << " " << *p << "\n";   // aì�˜ ê°’ê³¼ pì—� 저장ë�˜ì–´ìžˆëŠ” 메모리 주소ì—� ë³´ê´€ë�˜ì–´ìžˆëŠ” ê°’ì�„ ìœë ¥í•œë‹¤.
}

ì�´ê±¸ 실행하면 무엇ì�´ ìœë ¥ë� ê¹Œ?
ì�´ê±¸ 실행하면 다ì�Œê³¼ ê°™ì�´ ìœë ¥ì�´ ë�  것ì�´ë‹¤.

~cpp 
10 10
3 3

여기서 *ì—°ì‚°ìž�를 ì�´ìš©í•˜ì—¬ *p를 ìœë ¥í•˜ëŠ”ê²ƒì�˜ ì�˜ë¯¸ëŠ” 무엇ì�´ëƒ� 하면...
pì—� 저장ë�˜ì–´ìžˆëŠ” 메모리 주소ì—� ë³´ê´€ë�˜ì–´ìžˆëŠ” ê°’ì�„ ìœë ¥í•˜ëŠ” 것ì�´ê³ ,
pì—� 저장ë�˜ì–´ìžˆëŠ” 메모리 주소는 aì�˜ 주소ì�´ë¯€ë¡œ ê²°êµ­ aì—� ë³´ê´€ë�˜ì–´ìžˆëŠ” ê°’ì�„ ìœë ¥í•˜ê²Œ ë�˜ëŠ” 것ì�´ë‹¤.
�한 *연산�를 �용하여 *p� 값� 바꾸는것�...
p� 저정�어있는 메모리 주소� 보관�어있는 값� 바꾸는 것�고,
p� 저장�어있는 메모리 주소는 a� 주소�므료 결국 a� 보관�어있는 값� 바꾸는 것� �다.
3번째 문장 �후 *p와 a는 같� �미로 쓰�게 �는 것�다.
그래서 �러한 결과가 나타나게 �다.

  • í�¬ì�¸í„°ì�˜ 활용 (Call by value, Call by address)
지금까지 ��터� 대하여 쭉 했는�...
그렇다면 과연 �런 ��터를 어디�다가 �먹�수 있�까?
가장 대표ì �ì�¸ 것으로 함수 호ìœì�˜ 전달ì�¸ìž�ì—�서ì�˜ 활용ì�„ 알아보ë�„ë¡� 하ìž�.
먼저 다� 예제를 보고 계�하�� 하겠다.

~cpp 
#include <iostream>
using namespace std;

void func(int a)
{
     a=10;
}

void main()
{
     int a;
     a=3;
     func(a);
     cout << a;
}

�걸 실행하면 결과가 어떻게 나올까?
C++ì�„ 제대로 배웠다면 3ì�´ ìœë ¥ë�œë‹¤ê³  ë§�í•  것ì�´ë‹¤.
main 함수ì—�서 aì—� 3ì�„ 대입하고 funcë�¼ëŠ” 함수를 ìœë ¥í•˜ë©° a를 funcì—� 넘겼다.
그리고 funcì—�서는 aì—� 10ì�„ 대입했는ë�°, 그러니까 10ì�´ ìœë ¥ë�˜ì•¼ 하지 않ì�„까?
그렇다고 ��한다면.. C++� 다시 배우길 바란다.

main 함수�서 a�는 변수와, func 함수�서 a�는 변수는 서로 다른 변수�다.
블럭({로 시작하여 }로 �나는것) 안�서 static ��는 키워드 없� 정�� 변수는
지역변수�고 하여 해당 블럭 안�서만 쓸 수 있는 변수�다.
비� 같� �름�� 할지�� 다른 블럭� 있으면 다른 변수� 것�다.
따�서 main 함수� a와 func 함수� a는 다른 것�고, func�서 a를 10으로 바꿔봤�
main 함수ì�˜ a는 변함ì�´ 없기 때문ì—� 3ì�´ ìœë ¥ë�œë‹¤.

main 함수ì—�서 func 함수를 호ìœí• ë•ŒëŠ” main 함수ì�˜ a 변수ì�˜ ê°’ì�„
func 함수ì�˜ a 변수로 복사해주는 형ì‹�으로 호ìœì�´ ì�´ë£¨ì–´ì§„다.
ì�´ì™€ ê°™ì�€ 호ìœì�„ Call by value ë�¼ê³  한다..

그렇다면 func�서 main 함수� a� 값� 바꿔줄 수 있는 방법� 없�까?
당연히 있으니까 �런 소릴 하고 있� 것�다.
��터를 사용하면 �런 것� 가능해진다.
다� 예제를 보기 바란다.

~cpp 
#include <iostream>
using namespace std;

void func(int *p)
{
     *p=10;
}

void main()
{
     int a;
     a=3;
     func(&a);
     cout << a;
}

앞ì—�서 í�¬ì�¸í„°ì—� 대하여 잘 ì�´í•´í–ˆë‹¤ë©´, ë³´ìž�마ìž� ì�´í•´ê°€ 됬ì�„ 것ì�´ë‹¤.
��� 설명� 필요없�꺼� 믿는다.
하지만 앞�서 제대루 공부하지 않� 사람들� 위해 설명하겠다.

아까와는 달리 main 함수ì—�서 func 함수를 호ìœí• ë•Œ aì�˜ 메모리 주소를 넘겨 주었다.
그리고 그 메모리 주소를 func 함수�서는 p�는 ��터로 받고 있다.
�한 func 함수�서 p ��터가 가지고 있는 메모리 주소� 값� 바꾸고 있다.
p ��터는 main 함수� a� 주소를 가지고 있으므로 결국 main 함수� a가 바뀌게 �는 것�다.
그래서 ìœë ¥ì�€ 3ì�´ 아닌 10ì�´ ë�œë‹¤.

ì�´ì™€ê°™ì�´ 함수 호ìœì—�서 주소를 사용해 전달 ì�¸ìž�를 넘겨주는 방법ì�„
Call by address �고 한다.

�것 외�� Call by reference �는 방법� 하나 � 있다.
�것� ��터 �고 참조 �는 것� 있는�, � 참조를 �용한 방법�므로 참조를 설명할때 하�� 하겠다.

4.7. 중간고사 시험-_-문제


  • 그런ë�°.. 여기 있는걸 다할 필요가 있ì�„까?--;
  • 여기 있는게 기본 아닌가.. ì�´ê±´ 필히 알아야 ë�„움ì�´ ë� ê±° ê°™ì�€ë�°.. --선호
  • enum, union, pointer ê°™ì�€ê±´ 안해ë�„ ë�˜ë ¤ë‚˜? -.-; pointer 는 ë�”ë�”ìš± 해야할거 ê°™ì�€ë�°.. --창섭
  • í�¬ì�¸í„°ëŠ” ë‚´ê°€ 해주마..ã…‹ã…‹ --ìƒ�ê·œ

  • ì�¼ë‹¨ 하루 날잡아서 하는거니까.. 너무 무리하지는 ë§�ìž�. 글구 enum,union ê±°ì�˜ 안쓰지 않ëƒ�? --ì�¸ìˆ˜
  • í�¬ì�¸í„°ëŠ” ë­� 필수고.. ìƒ�규가 ìž�신있다니까 함 맡겨볼까
  • http://www-h.eng.cam.ac.uk/help/mjg17/teach/CCsummary/CCsummary-html.html
    어제 여기�서 C++ 30분만� 훑어 봤다 함 �바 캠브리지 대학 �료당 -재�
  • enum, union등ì�€ 있다는 것만 알려주고 넘어가는게 나ì�„ 듯. ê·¼ë�° ì�´ 세미나 좀 길어지겠는ë�°? --병í�¬
  • ì�´ì œ 구체ì �으로 ì�¼ì •ì�„ 잡았으면 좋겠다...--ìƒ�ê·œ
  • í�‰ì�¼ë‚  한다면 ìš°ì„ ì�€ 02들 시간표ì—� 맞춰서 시간ì�„ ë‚´ê³  거기ì—� 맞는 강사들ì�´ 들어가기로 하ìž� 주ë§�ì—� 한다면 ë­� ìƒ�ê´€ 없지만...^^ --재ë�™
  • ì „ c 세미나를 준비하고있는 00학번 김남훈ì�´ë�¼ê³  하는ë�°ìš”. c++ 세미나가 제가 하는거하고 ìƒ�당부분 중복ë�˜ëŠ”ë“¯ 한ë�°.. 어쩌죠? 사실 02학번ì�´ 중간고사까지 ë°°ìš´ë‚´ìš©ì—� 대해 세미나를 한다고 하면, c 나 cpp ê°€ 그다지 ì°¨ì�´ê°€ 없기ë�„ 하고. ì�¼ë‹¨ 저는 10ì�¼ì—� 할까 ìƒ�ê°�중입니다.
  • 그럼 남훈ì�´í˜•ì�´ c기초를 해주시겠어요? for,if ì�´ëŸ°ê±°.. 그럼 ì €í�° ì €í�¬ê°€ 준비한 í�¬ì�¸í„°ì™€ oopì�´ëŸ°ê±° í•´ë³¼ ìƒ�ê°�입니다.
  • 윗분ì�€ 누구신지.. 그럼 제가 기초를 하죠. 그런ë�° 02한테 지금 oop 를? ; 그리고.. í�¬ì�¸í„° 할때는 제가 서í�¬íЏ 갈께요;; -zennith
  • í�¬ì�¸íŠ¸ë¥¼ 하니 ë˜� 재복ì�´ê°€ ìƒ�ê°�나는 êµ°......재복ì�´ëŠ” 잘 구르고 있나...ì•„..ì�´ì œ 구를 때는 갔군..언제 제대ë�”ë�¼~
  • 세미나 ë�„대체 언제 할꺼ëƒ�? -- ìƒ�ê·œ
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:04
Processing time 0.0153 sec