피씨컴의 기울어진 공관

'프로그래밍/공부'에 해당되는 글 55건

  1. 2013.03.07 3/4
  2. 2013.03.07 2 / 28
  3. 2013.03.07 2/27
  4. 2013.03.07 2 / 26
  5. 2013.03.06 (2/25) 부족한부분 추가정리
  6. 2013.03.06 정리(2/22)
  7. 2013.03.03 8장 객체와 클래스
  8. 2013.03.03 7장 중간정리
  9. 2013.03.03 5장 구조체
  10. 2013.02.26 6장 함수

3/4

프로그래밍/공부 2013. 3. 7. 12:42

● OPP

모든 단위를 객체 단위로 처리한다, 각 객체는 각 동작

 

● 클래스

인스터스를 구체화할 맴버변수와 함수 기능과 동작으로 이루어진 타입

사용자가 만들어 놓는 타입 / 인스턴스화 가능

 

- 특징

1. 정보은닉

2. 상속

3. 캡슐화 : 비슷한 특성을 캡슐로 감싸는 것

4. 다형성 : 다양하게 변화 할 수 있다.

5. 추상화 : 효율적으로 하기 위해 , 특성이나 이런걸 뽑아내기 위해, 효율적으로 하기 위해

 

 

● 인스턴스 : 구체화 실체화 하는 메소드들이 메모리 ? / 메모리만 가지고 있는 영역?

 

● 추상 클래스 

내부적으로 순수 가상함수 / 버추얼 함수 / 인스턴스화 불가능

 

● 인터페이스

외부와 약속되어져 약속된 접촉면 ( 함수, 헤더)

'프로그래밍 > 공부' 카테고리의 다른 글

3/7  (0) 2013.03.11
3/5  (0) 2013.03.07
2 / 28  (0) 2013.03.07
2/27  (0) 2013.03.07
2 / 26  (0) 2013.03.07
Posted by 피씨컴

2 / 28

프로그래밍/공부 2013. 3. 7. 12:25

● 오버로딩

같은기호 또는 명령어가 여러가지 기능을 하는것 (기능의 확장)

 

● 함수오버로딩

함수명은 같고 매개변수가 다른 함수를 정의하는것

 

● 디폴트 매개변수

디폴트 값은 상수만 가능 선언부에만 표기한다. (정의부 X) 함수오버로딩과 함께 사용할 대 문제가 발생할 수 있다.

 

디폴트 매게 변수는 인수들 중에 중구난방으로 있거나 없을 수 없다.

void inta(int a=1, int b =0, int c=0, int p,int t=9) // 이렇게 중간에 빠질 수 없다.

void inta(int a, int b, int c=0, int p=9,int t=9)

   이 뒤로는 모두 디폴트 처리를 해아한다.

 

 

● 재귀 함수

재귀의 뜻 : 원래의 자리로 되돌아가거나 되돌아옴

재귀 호출 : 함수가 자기 자신을 호출하는 경우

재귀 함수 : 재귀호출을 이용해 구현한 함수 재귀는 탈출조건이 필요하다

장점 : 코드가 간결해 진다.

단점 :

1. 무한루프에 빠질 수 있다. (스택 오버플로어 발생가능)

2. 메모리 부하가 커진다.

3. 연산시간이 비 재귀의 형태보다 오래 걸린다.

 

 

'프로그래밍 > 공부' 카테고리의 다른 글

3/5  (0) 2013.03.07
3/4  (0) 2013.03.07
2/27  (0) 2013.03.07
2 / 26  (0) 2013.03.07
(2/25) 부족한부분 추가정리  (0) 2013.03.06
Posted by 피씨컴

2/27

프로그래밍/공부 2013. 3. 7. 11:19

● 함수

약속된 기능을 수행하는 하나의 단위

 

● 함수의 4가지

- 선언 / 프로토타입(헤더) : int main (void);

       전달인자는 없고 이름은 메인이며 int를 반환

- 정의 : 함수의 몸통(바디)

- 시그니쳐 : 함수의 전달인자들의 모든 형태 파라메터 리스트라고도 한다.

 

● 함수의 전달인자와 반환값의 경우의 수

전달인지        /        반환값

(입력)                    (출력)

없다                        없다

없다                        있다    

있다                        없다

있다                        있다

 

● return도 값을 복사해서 돌려준다.

 

● call by 3종 세트

- value

- Adress: 주소값이 복사됨 함수의 매개변수로 주소 값을 넣는 방식

※ 포인터변수는 지역변수

변수의 주소를 이용하여 값을 변경

 

포인터 변수를 넣는 경우

포인터 변수의 주소 값은 변경되지 않는다.

 

- reference : 레퍼런스 변수에 의한 호출 주소가 아닌 변수를 직접 넣어도 값 변경이 가능하다.

 

 

● 레퍼런스 변수

1.메모리가 없는 변수 하지만 메모리에 할당된 원본이 필요

2. 한번 정의해주면 바꿀수가 없다.

 

● int & a;

운영체제로부터 메모리 공간 어딘가에 선언되어 있는 int형 변수에 a라는 별명을 붙인다.

 

● &의 쓰임세 및 위치에 따른 구분

int & a : 레퍼런스 변수

a & b : 비트논리

& c : 주소

 

● cout의 정렬   

- 왼쪽 정렬 : cout << left << "솰라솰라";

- 오른쪽 정렬 : cout << right  << "솰라솰라";

 

 

● setw

setw는 괄호 뒤 숫자만큼의 공간을 만들고, 바로 뒤에 오는 문자를 오른쪽 칸부터 채워넣게 한다.

 

 

 

 

 

'프로그래밍 > 공부' 카테고리의 다른 글

3/4  (0) 2013.03.07
2 / 28  (0) 2013.03.07
2 / 26  (0) 2013.03.07
(2/25) 부족한부분 추가정리  (0) 2013.03.06
정리(2/22)  (0) 2013.03.06
Posted by 피씨컴

2 / 26

프로그래밍/공부 2013. 3. 7. 11:00

● 영역

- 지역 : 사이 공간으로 다른 공간과는 구분되는 공간

- 상위, 하위 : 소스코드상 위와 아래, 먼저 실행되는 것이 상위 , 나중에 실행되는 것이 하위

- main 이외의 영역 : C++의 영역 or 그 파일의 영역

 

● 생명주기

- 전역 변수의 생명주기 : 해당 프로그램이 시작시(생성될때) 생성되고 프로그램이 종료할 때 소멸

- 지역 변수의 생명주기 : 해당 지역에서 해당 변수가 생성될때 (선언될때) 생성되어 해당지역을 벗어

                                   나면 소멸

- 정적 변수의 생명주기 : 해당 프로그램이 시작시(생성될때) 생성되고 프로그램이 종료할 때 소멸

 

 

 

 

●  (  :: )

이걸로 (전역, 지역)에 있는걸 접근, 할때씀

 

● 손은 안으로 굽는다굽쇼?

서 다른 지역의 같은 이름의 변수라도 해당 지역의 변수가 우선순위가 높다.

 

● static 정적변수도 0으로 자동초기화

 

● 지역에 선언한 정적 변수는 지역의 특징 전역에 선언하면 전역의 특징을 가짐

 

 

● 메모리 영억

코드 : 소스코드

data :  전역, 정적변수, 상수, 정적함수

힙 : 유동 영역, 동적 사용자가 할당한것???

스텍 : 배열, 함수부분의 위치, 지역, 전달, 임시공간, 약1mb(1024)

 

 

● const

대상을 상수화 시켜주는 것이다.

 

const int  *a ;    포인터가 현제 가르키고 있는 값을 변경 못함 (주소변경가능)

int * const a;     값의 변경은 가능하지만 주소를 변경못함

 

 

 

 

'프로그래밍 > 공부' 카테고리의 다른 글

2 / 28  (0) 2013.03.07
2/27  (0) 2013.03.07
(2/25) 부족한부분 추가정리  (0) 2013.03.06
정리(2/22)  (0) 2013.03.06
8장 객체와 클래스  (0) 2013.03.03
Posted by 피씨컴

● L-value  / R-value

L - Value  에는 공간 이나 주소가 와야하고

R - Value  에는 값이 와야 한다.

 

A = B

위의 문장은 변수B의 값을 변수 A의 주소에 저장하라는 의미다.
즉, 연산자( = )를 기준으로 왼쪽 변수 A에서는 주소를 오른쪽 변수 B에서는 을 사용한다. 결론적으로 변수의 L-value(left-value)는 주소를 의미하고, R-value(right-value)는 변수의 값을 의미한다.

 

 

 

● (char *)A - (char *)B

형변환하면 주소연산이 되어서 A와 B의 주소차를 알수 있음

 

 

● 배열의 요소 구하는 공식

배열의 총크기 / 배열 하나의 크기

   sizeof(e)    /  sizeof(int)

'프로그래밍 > 공부' 카테고리의 다른 글

2/27  (0) 2013.03.07
2 / 26  (0) 2013.03.07
정리(2/22)  (0) 2013.03.06
8장 객체와 클래스  (0) 2013.03.03
7장 중간정리  (0) 2013.03.03
Posted by 피씨컴

● 배열  a[ ] 설명

a : 배열의 시작주소 , 상수포인터, 배열 포인터, 모배열

[ ] : 랜덤 엑세스 지정 연산자

 

● 배열  == 정적 매모리 할당.

- 안전하다.

- 빠르게 접근가능

- 메모리의 낭비가 심할수 있다.

- data영억 정해진 메모리

 

● 동적 메모리 할당

- 안전하지 못함

- 동일한 주소에 재할당을 못함 (C++)

- 힙 메모리

 

● 포인터에 자료형이 필요한 이유

내부적으로 주소를 얼마만큼 이동시키는가 알아야 하기 때문

 

 

● 포인터 차수에 따라 연결하는 방법

int a         = 1;

int * p      = &a;

int **pp    = &p;

int ***ppp = &pp;

 

● void * 형

- 자료형이 없는 포인터 아무자료형이나 다 들어감

- 쓸때는 형변환을 해서 사용한다.

 

● 특이사항

- 운영체제에 따라 포인터 변수도 4바이트 였다가 8바이트 였다가 함.

 

 

 

'프로그래밍 > 공부' 카테고리의 다른 글

2 / 26  (0) 2013.03.07
(2/25) 부족한부분 추가정리  (0) 2013.03.06
8장 객체와 클래스  (0) 2013.03.03
7장 중간정리  (0) 2013.03.03
5장 구조체  (0) 2013.03.03
Posted by 피씨컴

● 순차적 프로그래밍

말 그대로 프로그램 코드를 주어진 작업 순서대로 나열한다.

 

● 구조적프로그래밍

프로그램의 효율적 작성을 목적으로 한다. 이는 프로그램 실행을 위해 필요한 기능 측면에서 보는
것이다. 하나의 문제를 해 결하기 위해 요구되는 기능을 확인하고 해당 기능들을 독립적으로 작성
하는 것이다 함수가 바로 구조적 프로그래밍의 실제로서, 필요한 기능을 하나의
함수로 작성하고 함수를 호출해서 작업하는 방식으로 구성된다. 함수 내에서는 다시 주어진 범위
내에서 순차적으로프로그램 이 작성된다.

 

● 객체지향프로그래밍

프로그램을 사람이 사는 실세계로 옮겨 놓은 형태로, 개념과 그 개념을 통해 실제가 생성되고 실체
가 움직이는 것으로 인해 프로그램이 실행된다. 따라서 실체는 자신을 나타내는 정보와 실행하는
기능을 포함한다. 기능의 구현은 클래스 내에서 구조적 프로그래밍 방식으로 이루어진다.

 

 

※ C++을 배우는 현 시점에서는 문제 분석 처음 단계에서부터 무조건 객체지향 프로그래밍 방식으로

    접근해야 한다는 사실

※ 객체지향에서 문제 해결의 시작점은 작업 순서가 아닌 누가 문제를 무엇으로 어떻게 풀어나가 는가

    이다.

 

 

● 객체지향 프로그래밍 (Object Oriented Programming) 과 객체 간추려서

객체지향 프로그래밍이란 주어진 문제에서  필요한 객체를 선별하고 이를 프로그램 코드로 옮겨 적는 것이다. 객체는 영어로 ’Object’라 한다. 이는 프로그램이 실행될 때 실제 결과를 만드는 실체를 의미한다.

 

 

● 클래스의 정의

객체지향 프로그래밍의 작업 순서는 크게 세 단계로 구분할 수 있다.

문제 분석 → 객체 식별 → 해당 객체의 클래스 정의

 

● 클래스의구성

• 멤버 변수: 상태를 저장
• 렘버 함수: 멤버 변수를 이용하여 자료 처리와같은동작을수행함

클래스는멤버 변수와멤버 함수로구성된다. 멤버 변수는객체의 상태나속성을나타내
는 값을 저장하고 멤버 함수는 객체가 수행해야 할 동작들을 수행한다. 이때 멤버 함수는 클래
스의 멤버 변수를 이용할 수 있고 또는 외부에서 매개변수로 임의의 값을 전달받아 사용할 수도
있다.

 

 

class 클래스 이름

{
    클래스멈버;

};

 

 

 

● 멤버 접근속성

클래스 맴버의 접근 속성에는 private, protected, public 세 가지가 있다.

 

• private: 같은 클래스 뱀버만 접근 허용
• protected: 상속 부분에서 배웅
• public: 모든 위치에서 접근 허용

 

자료형 클래스 이름 :: 멈버 함수 이름(매개변수)

{
    함수내용;

}

 

 

● 일반적으로 정의되는 형태: 맴버 접근 속성과 멤버 함수

 

일반적으로 클래스를정의할 때 맴버 변수와내부 처리에 해당하는 맴버 함수는 private으로 지
정하며 private 속성의 맴버 변수에 값을 할당하거나 외부에 값을 출력하는 함수는 public으로
맴버 접근 속성을 설정한다 

 

※ 맴버 변수와 내부 처리의 경우 private 속성으로, 외부에서 수행할 멤버 합수의 경우 public으로

    설정한다.

 

 

★ 예제 8-1 ~ 3

head.h

 

 

 

★ 예제 8-4 ~ 6

 

 

● 객체지향의 특징

• 추상회(Abstraction)
• 캡슐회(Encapsulation)
• 상속(Inheritance)
• 다형성 (Polymorphism)

 

 

추상화와 캡슐화는 매우 밀접한 관계가 있다. 추상화는 말 그대로 프로그램에서 식별된 객체를 개념화하는 작업이다. 이는 클래스 선언과 클래스 정의 동작을 이끈다. 정의된 클래스는 프로그램에서 객체로 생성되어 사용된다. 즉, 추상회는 클래스 선언, 정의, 실체화된 객체로의 사용으로 작업 영역을 구분할 수 있다.

 

'프로그래밍 > 공부' 카테고리의 다른 글

(2/25) 부족한부분 추가정리  (0) 2013.03.06
정리(2/22)  (0) 2013.03.06
7장 중간정리  (0) 2013.03.03
5장 구조체  (0) 2013.03.03
6장 함수  (0) 2013.02.26
Posted by 피씨컴

● 자료형

• bool: 논리형
• int: 정수형
• float: 실수형
• double: 배정도형
• char: 문자형

 

● 연산자

• 산술연산자
• 관계 연산자
• 논리 연산자
• 비트연산자

 

 

 

★ 예제 1

 

 

 

★ 예제 2

 

 

● 조건문

조건문: if
if (조건식)
조건이 참이면 수행할 문징:

 


if (조건식)
조건이 참이먼 수행할 문장:
else
조건이 거짓이면 수행할 문장

 

 

if (조건식 1)
조건식 101 참이면 수행할문장:
else if (조건식 2)
조건식 2가 침이면 수행할 문장:
else if (조건식 3)
조건식 301 침이먼 수행할 문장;
else
조건이 모투 만족되지 못할 때 수행할 문장:

 

 

● 조건 결과가 상수일 때 사용하는 조건문: switch


switch (수식)
case 상수 1 :
수식의 결과가 상수 1 일 때 수행할 내용;
case 상수 2:
수식의 결과가 상수 2일 때 수행할 내용;
case 상수 3:
수식의 결과가 상수 3일 때 수행할 내용;
case 상수 4:
수식의 결과가 상수 4일 때 수행할 내용
default :
수식 결과가 주어진 case에 모두 만족하지 않을 때 수행할 내용; }

 

● 반복문: for, while, do'""While
    for (초기화 ; 조건문 ; 증감문)
    {
    반복할내용;

    }

 

 

while (조건문)
{
반복할내용;

}

 

do
반복할내용;
} while (조건문);

 

 

★ 예제 7-1

 

 

 

 

● 네임스페이스

 

★ 예제 7-2

 

 

 

★ 예제 7-3

 

 

 

 

 

• 일반변수 : 자료가 저장

• 포인터 변수 : 기억 장소의 주소가 저장

•  배열변수 : 하나의 변수 이름으로 여러 개의 기억 장소를 사용하며 여러 개의 기억 장소가 연속적인 기억 공간으로 할당된다.

 

★ 예제 7-4

 

 

● 네임스페이스

구조체는 하나의 구조체형 변수가 여러 멤버를 포함할 수 있어 다양하게 활용할 수 있다.

구조체형 일반 변수에서 구조체 멤버를 참조할 때 멤버 참조 연산자는 .이고, 구조제형 포인터 변수에서 구조체형 멤버 참조할 때는 두 가지 방법이 있는데 , '->' 연산자를 주로 사용한다.

 

구조체형 일반변수
구조체형 일반 변수.멈버

 

구조체형포인터 변수
(*구조체형 포인터 변수).멈버
구조체형 포인터 변수->멤버

 

typedef struct 태그 이름

{
    구조체멈버;
} 재정의 이름;

 

★ 예제 7-5

 

 

 

● 함수

함수는 약속된 기능을 수행하는 작은 프로그램의 한 단위로서 자주 사용하는 기능은 미리 정의
되어 있다. 이미 정의되어 있는 함수는 일반적으로 ’라이브러리 함수’라 부른다. 만약 정의되어
있지 않은 경우라면 프로그래머가 직접 작성해야 하며 이를 사용자 정의 함수라 한다.

 

• 라이브러리 함수 : 이미 정의되어 있음
• 사용자정의 함수 : 사용자가 필요에 의해 정의함
• main( ) 프로그램 : 실행에서 시작과 끝을 담당힘

 

★ 예제 7-6

 

'프로그래밍 > 공부' 카테고리의 다른 글

정리(2/22)  (0) 2013.03.06
8장 객체와 클래스  (0) 2013.03.03
5장 구조체  (0) 2013.03.03
6장 함수  (0) 2013.02.26
25일 수업  (0) 2013.02.26
Posted by 피씨컴

● 구조체

구조체는 여러 자료의 항목을 모아놓은 형태이다.

 

● 레코드

레코드는 서로 연관된 자료항목이 모여 있는형태로, 파일이나 데이터 모음을 말하며 영어 발음그
대로 레코드라 부른다.

 

● 필드

필드는 항목이라 부르기도 하고 또는 영어 발음 그대로 필드 또는 아이템(Item)이라고도 한다. 이
는 데이터를 표현하는 기본 항목으로 레코드를 구성히는 기본 단위이다. 여러 개의 서로 의미 있는
필드가 모여 하나의 례코드를 구성한다.

 

● 구조체 정의 : 레코드 단위의 변수를 선언하려면 먼저 레코드가 어떤 구조를 갖는지 정의해야 한다.

    이를 '구조체 정의'라 한다. 구조체를 구성하는 필드와 각 필드의 자료형을 결정하는 것이다.

 

구조체형 변수선언 1
struct [태그 01름]

{
구조체멈버선언;
}[변수 이름 1], [변수 이름 2];


구조체형변수선언 2
struct [태그 이름]

{
구조체멈버선언;

}
struct [태그 01름][변수 이름 1], [변수 이름 2];

 

※ 태그 이름은 구조체형의 식별을 담당한다. 즉 여러 개의 구조체형 선언이 프로그램에 포함된
    경우 태그 이름으로 구조제형을 구분한다. 따라서 태그 이름은 유일해야 하고 구조체형 변수 선
    언 1과 같이 사용할 경우에는 생략할 수 있다. 그러나 구조체형 변수 선언 2와 같이 사용할 경우
    에는생략할수없다.

 

● 맴버 참조연산자

구조체 변수가 멤버를 지칭할 때 ”멤버를 참조한다라고 표현한다. 구조체 변수는 여러 개의 멤버를 가
질 수 있고 각 멤버를 참조할 때 멤버 참조 연산자를 사용한다. 이때 구조체 맴버 참조 연산자는
점 . 이다.

 

 

● 구조체 맴버 : 구조체를 구성하는 필드를 ’구조체 맴버’라 부른다. 구조체의 멤버는 정수형, 실수형,

    배정도형 , 문자형 등 일반 자료형이 될 수 있고 또한 구조체형 변수도 하나의 멤버로 포함될 수 있다.

 

 

★ 예제 5-1

일반 문자열 배열에 자료를 집어넣기 위해선 strcpy_s를 쓰면 된다.

이 예제의 용도는 다음의 구조체 변환을 위한 포석이다. 위 소스가 아래의 다음 예제에서 구조체로 변하게 된다.

 

 

 

★ 예제 5-2

위 5-1의 소스를 구조체로 바꾼 형태이다. 보통 이렇게 하면 Friend의 기억공간이 할당되고 그안에 name과 NPhonenum이 자리하게 되는 형태가 되는 것이다 이것들은 맴버라 부르며 각각의 맴버는 맴버참조 연산자로 접근 할수가 있다.

 

 

★ 예제 5-3

이도 마찬가지로 구조체로 변환의 한 예제로 쓰일 것이다.

 

★ 예제 5-4

위 5-3이 구조체로 변한 모습이다. 여기서 키포인트는 Fried1 = Fried; 이 부분이다.

이부분은 에러가 아니다. 일단 바로 그위에 strcopy로 자료를 채워넣은뒤 그 자료를 같은 이름의 구조체 끼리는 데이터형태가 동일하기 때문에 따로 문자열을 카피하기 위한 프로세셍을 할 필요 없이 그냥 데이터를 넘겨주기만 하면 되기 때문

 

 

 

 

 

※ 구조체의 멤버로 구조체를 포함한 경우 참조 연산지를 사용해서 포함된 구조체의 멤버를 참조

    할수있다.


    - 구조체 엠버가 구조체형 변수를 포함할 때
         [구조체 변수].[맴버인 구조체형 변수].[맴버]

 

 

 

 

★ 예제 5-5

구조체의 맴버로 구조체를 포함한 경우 참조연산자를 이용하여 포함된 구조체의 맴버를 참조하는 예제이다. 맴버참조 연산자를 연속적으로 사용하는 것으로 구조체속의 구조체를 참조할수 있게 되는 것이다.

 

 

 

 

● typedef를 이용한 구조체 정의

일반 자료형 예약어(int. float. doubl. char)는 하나의 단어로 간단하다. 그러나 구조체형은 사
용자가 필요한 내용의 멤버들이 포함되어 있어 길다. 따라서 변수 선언에서 복잡해 보인다. 이
를 위한 해결 방법은 typedef이다. typedef는 이미 정의된 내용을 다시 정의하는 역할을 한다.

 

typedef [이미 정의된 내용] [새로 정의해서 사용할 내용];

 

 

 

 

★ 예제 5-6

위 예제는 typedef를 이용하여 미리 sam으로 정의한 구조체를 새로운 이름 SAM으로 재정의를 하는 case를 보여주는 예제이다. 이렇게 typedef를 통해 새로 재정의된 것들은 재정의 이전의 것과 똑같이 사용할 수 있다.

 

 

 

 

● 구조체 태그를 이용한 재정의

구조체형 선언과 typedef를 함께 사용하면 프로그램 코딩 시 편리할 뿐만 아니라 코드의 가독
성 면에서도 매우 좋다. 일반적으로 이러한 이유 때문에 구조체형 선언에서 구조체 태그 이름을
생략하고 재정의를 다음과 같이 함께 사용한다.


typedef struct

{
구조체멈버선언;
}재정의 이름;

 

★ 예제 5-7

구조체 태그를 이용한 재정의를 사용한 예제이다

 

 

 

● 구조체선언위치

구조체는 선언 내용이다. 따라서 소스 파일과 함께 같은 파일에 있어도 되지만 프로젝트가 커지
면 대부분 헤더 파일에 별도로 관리하는 것도 가능하다.

 

 

 

★ 예제 5-8

 

 

※ ITem맴버 변수의 크기


int Monlh : 4바이트
int Day : 4바이트 (현재까지 4바이트+4바이트이므로 총 8바이트)
char itemName[50] : 50바이트(현재까지 앞에서 8바이트+50바이트01므로 현재 58바이트이다. 그런데

                            58은 4의 배수가 아니며, 이어서 오는 멈버(Quantity)가 문자헝(1 바이트 딘위)

    이 아니므로 처리단위에 대해 4의 배수 단위로 처리해야 한다 따라서 58보다 큰

    가까운 4의 배수인 60바이트가 할당된다 *)

int Quantity : 4바이트 (현재까지 앞의 60바이트 +4바이트01므로 층 64바이트)
int UnitCost : 4바이트 (현재까지 앞의 64바이트 +4바이트이므로 총 68바이트)
int Price : 4바이트 (현재까지 앞의 68바이트 +4바이트0 1므로 총 72바이트)

 

 

★ 예제 5-9 / 5-10

head.h

main.cpp

구조체를 head에 따로 정의했다.

 

 

 

 

 

★ 예제 5-11

구조체 배열을 활용방법에 대한 예제이다. 구조체를 배열로 만든 형태이고 그 쓰임세는 배열의 쓰임세와 크게 다르지 않다. 단 선언과 동시 초기화 할때에는 구조체 맴버의 순서에 따라 , 를 따라 차례로 입력된다.

 

 

● 구조체 포인터

구조체 포인터도 사용할 수 있다. 일반 포인터 변수와 마찬가지로 구조체형 포인터 변수도 서로
자료형이 일치해야 한다. 구조체형 포인터 변수 선언과 사용은 일반 자료형 포인터 변수와 마찬가
지이다. 주의할점은멤버 참조이다. 엠버 참조시 간접 연산자를사용해서 다음과같이 표시한다

(*구조체형 포인터 변수)멤버

 

 

 

★ 예제 5-12

구조체 포인터를 사용하는 예제이다. 역시 구조체 포인터도 일반 포인터와 그 쓰는방법은 크게 다르지 않다.

 

 

★ 예제 5-13

※ 구조제형 포인터 변수에서 멤버 참조를 위해 별도의 포인터 변수의 멤버 참조 연산자가 제공된

    다.

   

    구조체형 포인터 변수 -> 맴버

 

기존의 구조체형 변수의 멤버 참조 연산지를 구조체형 포인터 변수에서 사용하려면 매번 간접
연산자와 중괄호를 표시해야 하므로 번거롭기 때문에 구조제형 포인터 변수의 참조 연산자인
-> 를 많이 사용한다.

 

'프로그래밍 > 공부' 카테고리의 다른 글

8장 객체와 클래스  (0) 2013.03.03
7장 중간정리  (0) 2013.03.03
6장 함수  (0) 2013.02.26
25일 수업  (0) 2013.02.26
5일차? 6일차? (2/19)  (0) 2013.02.21
Posted by 피씨컴

6장 함수

프로그래밍/공부 2013. 2. 26. 21:58

● 함수

주어진 기능을 수행하는 것 / 주어진 기능을 수행하는 블랙박스

 

 

★ 예제 6-1

 

함수의 예를 보여주기 위한 예제

 

 

● 표준함수

기능이 이미 정의된 함수. 이미 정의된 표준 함수를 사용할 때에는 함수를 어떻게 사용하면 되는가를 알고 있어야 하고 해당 함수의 정보를 참조할 수 있는 파일(헤더파일)을 include 시켜줘야함

 

● 사용자 정의 함수

기능이 정의되어 있지 않아 프로그래머가 필요에 의해 정의한 함수.

"함수선언" , "함수정의" , "함수호출" 의 프로세스

 

- 함수선언

함수의 프로토타입을 결정하는 것이다. 함수를 실제 프로그램 코드에서 사용할 때 컴파일러가 해

당 내용이 어떤 형식으로 이루어졌는가를 판단하는 부분으로, 해당 함수가 정해진 약속대로 쓰

이고 있는가를 확인하는 데 필요하다. 함수 선언은 함수 프로토타입과 같은 형식이고선언문에 해당하므로 마지막에 문장의 끝을 얄리는 세미콜론(;) 기호를 입력해야한다.

 

- 함수정의

함수 정의는 실제 해당 함수에서 실행될 내용을 프로그래밍하는 것이다.

 

 

 

 

● main()함수

프로그램 실행에서 프로그램의 시작과 끝을 담당하는 함수. 프로그램이 실행되려면 하나 이상의 main

함수가 반드시 있어야 하고 프로그램이 실행된다는 것은 운영체제에 의해 main()함수가 호출된다는 의미이다.

 

● 함수를 사용한다는 것은?

함수를 호출한다라고 표현

 

● 함수 프로토타입 구성

 

함수         반환값            함수이름(매개변수,...)

 

항목         의미                                                        함수의 프로토타입에서

 

입력         여러가지 입력 가능하다                                매개변수

함수         함수를 구분하는 함수 이름을 갖고있다            함수 이름

결과         함수는 주어진 기능을 수행하고 하나의            반환값

               결핏값을 가져올 수 있다.이를 "반환한다"

   또는 "반환값"이라 한다. 그 이유는 힐수의

   마지막에 반환값을 알리는 명렁이 ’return'

   이어서 그대로 부르거나 해석해서 ’되돌린

   다’고 부르기도 한다

 

- 주의

1. 함수 반환값은 함수 실행 후 반환하는 값의 자료형을 의미하며 만약 반환값이 없을 때는 void

    라 표시한다.

2. 함수 이름은함수를식별하는 역할로써 다른함수의 이름과중복되면 안된다.

3.매개변수는 하나 이상이라면 콤마로 구분하며 자료형을 명시해야 한다. 만약 매개변수가 없을

   때는 void로 표기한다. 매개변수에는 함수를 호출할 때 해당 값을 명시한다. 즉, 함수 실행에

   필요한 입력 값을 기억하는 변수나 상수를 해당 매개변수 위치에 적어주는 것이다. 이를 ”매개

   변수를 전달한다라고 말한다.

 

 

 

 

 

 

 

★ 예제 6-2 ~ 6

 

head.h 6-2

6-3 / 6-4 / 6-5

6-6

소스를 기능별로 사용자 정의 함수로 나누었다. 선언과 정의부분이 각각 다른 파일에 있다.

 

 

 

 

● 헤더파일 작성에서 전처리기 사용

프로그램이 복잡해지면 하나의 헤더 파일을 여러 번 참조하게 되는 경우 재정의로 인한 오류가 발생하게 된다. 이를 방지하기 위해 컴파일에서 해당 코드를 한 번만 참조하게 하는 전처리기를 사용한다. 관련된 예약어로는 두 가지 형태가 있다.

 

#ifdef AAA

#else
#endif

위의 내용은 AAA가 정의되어 있다면 #ifdef와 #else 사이의 내용을 컴파일하고, AAA가 정의
되어 있지 않다면 #else와 #endif 사이의 내용을 컴파일하는 것이다.

 

#ifndef AAA
#else
#endif

위의 내용은 AAA가정의되어 있지 않다면#ifndef와 #else 사이의 내용을컴파일하고, AAA가
정의되어 있다면 #else와 #endif 사이의 내용을 컴파일하는 것이다

 

※ 위의 AAA의 정의를 하는 방법중 한가지 방법으로 #define을 쓸 수 있다 (#define AAA 123)

 

- 헤더파일을 작성하는 경우

 

#ifndef _헤더 파일 이름을 대문자로 표시_
#define _헤더 파일 이름을 대문자로 표시_
선언내용
#else
#endif

 

 

 

★ 예제 6-7

 전처리기를 사용하여 미리정의된 문구를 만들고 그것에 따라 다른결과를 보여줄수 있는 예제이다.

현제는 전처리기를 통하여 TEST가 미리 정의되므로 소스코드 내에 #ifdef TEST 에서의 조건이 참이다 그렇기 때문에 TESTESTESTES.... 라는 결과가 나왔고  #else 내의 소스코드가 회색으로 변하게 된것이다.

 

★ 예제 6-8

#ifndef CONFIG H
#define CONFIG H
#include <iostream>
using namespace std;
int TotalCalculation (int jumsu[] , int num);
float Round(float average , int digits);
#else
#endif

 

이렇게하면 헤더 파일에서 선언된 내용을 한 변만 참조하게 할수 있다.

 

 

★ 예제 6-9 ~ 11

head.h 6-9

function.cpp / mian.cpp 6-10 / 6-11

 

보면 알겠지만 각 각 다른 파일에서 head.h를 따로 부르는것이 보일 것이다. 하지만 head의 #ifndef 문으로 중복방지를 해주어서 head.h를 통틀어 한번반 참조하게 되는 것이다.

 

 

 

 

 

 

 

 

 

● 함수 매개변수 전달

- Call by Value : 매개변수의 값을 복사하여 전달하는 방법

★ 예제 6-12

    

사용자 정의 함수를 정의하고 Call by value로 호출하는 예제이다.

 

- Call by Reference : 주소를 전달하는 방법

★ 예제 6-13  Call by Reference로 정의하는 법

int TestFunc2(int &a)
{
 cout << "a= " << a << endl;
 a=777 ;
 cout << "a= " << a << endl;
 return 0;
}

 

★ 예제 6-14

 

 

 

- 디폴트 매개변수 : 함수 선언에서 함수의 매개변수에 초깃값을 정해놓고 함수 호출에서 함수의

                           매개변수를 지정하지 않은 경우 해당 초깃값을 호출한 함수에서 사용하는 것을 말

                           한다.

 

★ 예제 6-15

디폴트 매개변수를 인수로 사용하는 사용자 정의함수의 선언과 호출에관한 예제.

 

 

 

 

 

 

● 함수와 const 활용

★ 예제 6-16

int TestFunc3(const int a)

{

cout << "a=" << a << endl;
a=999;
cout << "a=" << a << endl;
return 0;

}

컴파일하면 에러가 발생한다. 에러메시지는 다음과 같다.

'a' : const 인 변수에 할당할 수 없습니다.

매개변수 a를 const로 지정했기 때문에 값을 수정할 수 없어 발생한 에러이다.

 

 

★ 예제 6-17

 

★ 예제 6-18

 

★ 예제 6-19

 

const 를 활용한 함수 예제.

 

 

 

 

● 함수 오버로딩

함수 이름은 같은데 함수의 반환형이나 매개변수가 다르게 함수를 정의하는 것을 말한다. 같은 함수 이름으로 여러 개의 함수를 작성하는 것은 함수 정의에서효율적일뿐만아니라함수를사용할때도편리하다.

 

- 함수를 식별하는 항목 3가지

1. 함수 반환형

2. 함수 이름

3. 함수 매개변수

 

 

 

★ 예제 6-20

 

★ 예제 6-21

 

★ 예제 6-22

함수 오버로딩으로 같은 이름의 함수라도 인수에 따라 다른기능을 하게 된다.

 

 

 

 

● 구조체형 일반 변수를 함수의 인수로(Call by Value )

함수 호출에서 매개변수로 구조체형 일반 변수의 사용은 값을 전달하는 역할이다. 따라서 함수
호출에서 전달한변수와함수내에서의 변수는별도의 기억 장소이다. 따라서 함수내에서 값을
수정해도 함수 호출에서 사용한 변수에 영향을 미치지 않는다.

 

typedef struct {
char name[30];
int age;
} PERSON;
int TEST1(PERSON a);

 

r        =        TEST1(p)

     ↑                    ↑

정수형변수         PERSON형 변수   

 

 

★ 예제 6-23

구조체함수를 Call by Value 형식으로 구현한 예제이다.

 

 

 

 

● 구조체형 포인터 변수를 함수의 인수로(Call by Reference)

 

typedef struct {
char name[30];
int age;
} PERSON;
int TEST1(PERSON * a);

 

r        =        TEST1(&p)

     ↑                    ↑

정수형변수         PERSON형 변수   

 

★ 예제 6-24

구조체함수를 Call by Reference형식으로 구현한 예제이다.

 

'프로그래밍 > 공부' 카테고리의 다른 글

7장 중간정리  (0) 2013.03.03
5장 구조체  (0) 2013.03.03
25일 수업  (0) 2013.02.26
5일차? 6일차? (2/19)  (0) 2013.02.21
4일차? 5일차? (2/18)  (0) 2013.02.21
Posted by 피씨컴