반응형

1. 출력
    (1) cout : 기본적인 출력 객체
         1) cout << 3.12345678 << end;
            이런 소스를 작성하였을때, 기본정밀도는 소수점을 포함하여 6자리이기
            때문에 결과는 3.12346(마지막자리 반올림) 가 된다.
         2) setiosflags(ios::fixed)  : 소수점을 6자리로 고정
             cout << setiosflags(ios::fixed) << 3.12345678 << endl;
             출력은 3.123457
         3) setprecision(개수) : 원하는 소수점 개수를 출력할 수 있다.
             cout << setprecision(10) << 3.123456789 << endl;
         4) setiosflags(ios::showpoint); : 소수점 셋째자리까지 표현, 빈칸은 0으로
             cout << setiosflags(ios::showpoint);
         5) resetiosflags(ios::showpos | ios::right); : 만약 showpos, right를 설정해
             주었다면 그것을 모두 해제 시킨다.

    (2) cin : 기본적인 입력 객체
         1) cin >> name;  : 출력과 화살표의 방향이 반대 방향이다.
         2) cin은 문자열을 입력받을 경우 공백 입력시 끝으로 입력하는 약점이 있다.
             입력 : Han Dong Sun      출력 : Han
         3) cin.get() : 문자열 전문 입력 메소드. cin의 약점인 공백까지 잘 입력받는다.
             But, 고질문제가 있었으니 그것은 엔터키에 의한 버퍼문제다.
         4) cin.ignore() : cin.get()에서 문제가 생겼을때 그 자리에 추가시켜주면 문제를 해결해준다.
         5) cin.getline() : 이것역시 문자열 입력 전문 메소드로써 cin.ignore를 사용하지 않아도 된다.


2. 함수
    (1) 함수의 인자전달 방식
         1) 값에 의한 전달(Call by value)
         2) 주소에 의한 전달(Call by address)
         3) 참조에 의한 전달(Call by reference)

인자전달방식에는 이 세가지가 있는데 C언어에는 값에의한전달과 주소에의한전달
이 두가지가 있다.  C++에서 추가된것이 참조에의한전달이다. 소스코드를 보며
이해를 돕겠다.


합 구하기 Call by address
#include <iostream.h>
void hap(int, int, int, int *);

int main(void)
{
 int i=2, j=3, k=4, sum=0;
 cout << "변수의 합..." << endl;
 hap(i,j,k, &sum);
 cout << "결과 : " << sum << endl;

 return 0;
}
void hap(int a, int b, int c, int *s) {
 *s = a + b + c;
}
주소에 의해 값을 전달하는 것을 보면
sum의 주소를 넘겨주고
hap함수에서 s(sum의 값)를 연산한다.

합 구하기 Call by reference
#include <iostream.h>
void hap(int, int, int, int &);

int main(void)
{
 int i=2, j=3, k=4, sum=0;
 cout << "변수의 합..." << endl;
 hap(i,j,k, sum);
 cout << "결과 : " << sum << endl;

 return 0;
}
void hap(int a, int b, int c, int &s) {
 s = a + b + c;
}
이 소스를 쉽게말하면 sum에 s라는 별칭을 하나 줘서
간단하게 연산을 끝낼 수 있다.

가장 큰 차이점을 말하자면
주소에 의한 전달은 주소를 받아 값을 넘기고 하는 복잡한
연산과정이 있지만 참조에 의한 전달방식은 그러한 과정을
생략하여 간단하기도 하며 속도도 빠를 수 있는 장점을 갖게된다.



3. Default Argument : 매개변수에 기본값을 설정하는것
    (1) 선언
         1) void proc(int i=0, char ch='a')            
         2) proc(5) 이렇게 함수의 매개변수를 넘겨주더라도 ch값이 a로 기본적으로 설정된다.
         3) 주의점 : 일부분만 매개변수를 채울시 선언시의 매개변수 설정을 끝부터 채워줘야한다.


4. 함수의 OverLoading(중복정의)
    (1) 개념
       
똑같은 이름의 함수를 여러개 만들수 있다. 똑같은 이름의 함수를 만들 수 있으나 매개변수의 갯수,
         형식, 위치라던지의 구분을 둬야한다.
         1) 예

               void a(int i) {
               }
               void a(int i, int j) {
               }
               void a(int i, double b) {
               }
               ※ 주의할점 : 비슷한 기능을 같은 이름으로 묶어야만 편리하게 쓸수있다.


5. C코드 호출
    (1) 개념
          예전 c언어에서 사용하던 함수들을 업그레이드 하거나 컨버팅 하기 위해 사용한다.
         1) 예
               extern "C" int comp(char *, char *); // 선언
               extern "C" { // 이렇게 정의해주고
                   int comp(char *a, char *b) { // 이렇게 안에 c언어에서 쓰던 명령어들을
                   return strcmp(a,b);  // 써줌으로써 이 명령어들을 사용할 수 있다.
                   }
               }


6.inline 함수 :  내부적으로 처리하는 함수
    (1) 목적
         1)
함수를 빠르게 호출하기 위해
         2) 함수를 안전하게 쓰기 위해서(매크로 함수의 부작용을 만회하기 위해)
    (2) 개념
         함수의 내용을 메인함수에 그대로 복사해와서 처리할때 내부적으로 처리하는 함수
         내용들을 미리 복사해 놓았기때문에 속도가 빠를수밖에 없다.

     인라인함수는 짧을수록 좋다.(일반적으로 10줄정도) 왜냐하면 그대로 모두 복사해서
     사용하는것이기 때문에 함수의 길이가 너무 길게되면 오히려 배보다 배꼽이 더 커지게
     되어 속도가 더 느려질 수 있다.

     "반복문"이나 "재귀함수"일 경우 인라인함수가 무효가 되버린다.
     (=#defin(매크로함수) 실행되기전에 미리 복사되어 사용, 인라인함수와 비슷하다)

     가정하면
     int main() {
         a() {
         }
     } 이런 형태라고 보면 된다.

    쓰는방법 :
     inline void a(){ // 보통 쓰는 함수에서 inline만 붙인 형태다.
              .
              .
     }

반응형

+ Recent posts