Download presentation
Presentation is loading. Please wait.
1
윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 01. C 언어 기반의 C++ 1
2
Chapter 01-1. printf 와 scanf 를 대신하는 입출력 방식 윤성우 저 열혈강의 C++ 프로그래밍 개정판
3
C++ 버전의 Hello World 출력 프로그램 헤더파일의 선언 #include 출력의 기본구성 std::cout<<‘ 출력대상 1’<<‘ 출력대상 2’<<‘ 출력대상 3’; 개행의 진행 std::endl 을 출력하면 개행이 이뤄진다. 예제를 이해하려 들지 말고 관찰하자. 그리고 위의 세 가지 사실을 확인하자. 예제를 통해서 확인할 사실 몇 가지 실행결과 C 언어에서는 출력의 대상에 따라 서식지정을 달 리했지만, C++ 에서는 그러한 과정이 불필요하다.
4
scanf 를 대신하는 데이터의 입력 입력의 기본구성 std::cin>>’ 변수 ’ 변수의 선언위치함수의 중간 부분에서도 변수의 선언이 가능하다. 예제를 통해서 확인할 사실 몇 가지 출력에서와 마찬가지로 입력에서도 별도의 서식 지정이 불필요하다. C++ 에서는 변수의 선언위치에 제한을 두지 않는다. 실행결과
5
C++ 의 지역변수 선언 이렇듯 연이은 데이터의 입력을 명령할 수 있다. for 문 안에서도 변수의 선언이 가능하다. std::cin 을 통해서 입력되는 데이터의 구분은 스페이스 바, 엔터, 탭과 같은 공백을 통해서 이뤄 진다. 실행결과
6
배열 기반의 문자열 입출력 실행결과 문자열의 입력방식도 다른 데이터 의 입력방식과 큰 차이가 나지 않 는다.
7
Chapter 01-2. 함수 오버로딩 (Function Overloading) 윤성우 저 열혈강의 C++ 프로그래밍 개정판
8
함수 오버로딩의 이해 C++ 은 함수호출 시 ‘ 함수의 이름 ’ 과 ‘ 전달되는 인자의 정보 ’ 를 동시에 참조하여 호출할 함수를 결정한다. 따라 서 이렇듯 매개변수의 선언이 다르다면 동일한 이름의 함수도 정의 가능하다. 그리고 이러한 형태의 함수정의 를 가리켜 ‘ 함수 오버로딩 (Function Overloading)’ 이라 한다.
9
함수 오버로딩의 예 매개변수의 자료형이 다르므로 함수 오버로딩 성립 매개변수의 수가 다르므로 함수 오버로딩 성립 반환형의 차이는 함수 오버로딩 의 조건을 만족시키지 않는다.
10
Chapter 01-3. 매개변수의 디폴트 값 윤성우 저 열혈강의 C++ 프로그래밍 개정판
11
매개변수에 설정하는 ‘ 디폴트 값 ’ 의 의미 인자를 전달하지 않으면 7 이 전달된 것으로 간주한다. 여기서의 디폴트 값은 7! 따라서 이 함수를 대상으로 하는 다음 두 함수의 호출은 그 결과가 같다. MyFuncOne( ); MyFuncOne(7); 인자를 전달하지 않으면 각각 5 와 7 이 전달된 것으로 간주한다. 따라서 이 함수를 대상으로 하는 다음 두 함수의 호출은 그 결과 가 같다. MyFuncTwo( ); MyFuncTwo(5, 7);
12
디폴트 값은 함수의 선언에만 위치 함수의 선언을 별도로 둘 때에는 디폴트 값의 선언을 함수의 선 언부에 위치시켜야 한다. 그 이유는 컴파일러의 컴파일 특성에 서 찾을 수 있다. 컴파일러는 함수의 디폴트 값의 지정여부를 알아야 함수의 호출 문장을 적절히 컴파일 할 수 있다.
13
부분적 디폴트 값 설정 전달되는 인자가 왼쪽에서부터 채워지므로, 디폴트 값은 오른쪽에서부터 채워져야 한다. 전달되는 인자가 왼쪽에서부터 채워지므로, 오른쪽이 빈 상태로 왼쪽의 매개변수에만 일부 채워 진 디폴트 값은 의미를 갖지 못한다. 따라서 컴파일 에러를 일으킨다. 매개변수의 일부에만 디폴트 값을 지정 하고, 채워지지 않은 매개변수에만 인자 를 전달하는 것이 가능하다.
14
Chapter 01-4. 인라인 (inline) 함수 윤성우 저 열혈강의 C++ 프로그래밍 개정판
15
매크로 함수의 장점과 함수의 inline 선언 선행처리 결과 정점. 함수가 인라인화 되어 성능의 향상으로 이어질 수 있다. 단점. 함수의 정의 방식이 일반함수에 비해서 복잡하다. 따라서 복잡한 함수의 정의에는 한계가 있다. 매크로 함수의 정점은 취하고 단점은 보완한 것이 C++ 의 인라인 함수이다. 실행결과 키워드 inline 선언은 컴파일러에 의해서 처리된다. 따라서 컴 파일러가 함수의 인라인화를 결정한다. inline 선언이 되어도 인라인처리 되지 않을 수 있고, inline 선 언이 없어도 인라인처리 될 수 있다.
16
인라인 함수에는 없는 매크로 함수만의 장점 매크로 함수는 자료형에 독립적이다. inline 선언된 함수를 위의 형태로 호출하려면, 각 자료형 별로 함수가 오버로딩 되어야 한다. 즉, 매크로 함수와 달리 자료형에 독립적이지 못하다. inline 함수를 자료형에 독립적으로 선언하는 방법 ! 이는 이후에 템플릿을 통해서 학습하게 된다.
17
Chapter 01-5. 이름공간에 대한 소개 윤성우 저 열혈강의 C++ 프로그래밍 개정판
18
이름공간의 기본원리 BestComImpl 이라는 이름의 공간 ProgComImpl 이라는 이름의 공간 존재하는 이름공간이 다르면 동일 한 이름의 함수 및 변수를 선언하 는 것이 가능하다. 이름공간 BestComImpl 에 정의된 SimpleFunc 의 호출 이름공간 ProgComImpl 에 정의된 SimpleFunc 의 호출 프로젝트의 진행에 있어서 발생할 수 있는 이 름의 충돌을 막을 목적으로 존재하는 것이 이 름공간이다. 범위 지정 연산자
19
이름공간 기반의 함수 선언과 정의의 분리 이름공간 BestComImpl 에 위치하는 함수 SimpleFunc 의 선언과 정의의 분리 이름공간 ProgComImpl 에 위치하는 함수 SimpleFunc 의 선언과 정의의 분리
20
동일한 이름공간 내에서의 함수호출 선언된 이름공간의 이름이 동일하다면, 이 둘은 동일한 이름공간으로 간주한다. 즉, SimpleFunc 와 PrettyFunc 는 동일한 이름 공간안에 존재하는 상황이다. 이름공간을 명시하지 않고 함수를 호출하면, 함수의 호출문이 존재하는 함수와 동일한 이름 공간 안에서 호출할 함수를 찾게 된다. 따라서 SimpleFunc 함수 내에서는 이름공간을 명시 하지 않은 상태에서 PrettyFunc 함수를 직접 호출 할 수 있다.
21
이름공간의 중첩 이름공간 Parent 이름공간 Parent::SubOne 이름공간 Parent::SubTwo Parent::SubOne::num Parent::num Parent::SubTwo::num 이름공간은 중첩이 가능하다. 따라서 계층적 구조를 갖게끔 이름공간을 구성할 수 있다.
22
std::cout, std::cin, std::endl 에 선언되어 있는 cout, cin 그리고 endl 은 이름공간 std 안에 선언되어 있다. 이렇듯 이름충돌을 막기 위해서, C++ 표준에서 제공하는 다양한 요소들은 이름공간 std 안에 선언되어 있다.
23
using 을 이용한 이름공간의 명시 이후부터 cin, cout, endl 은 std::cin, std::cout, std::endl 을 의미한다는 선언 이름공간 std 에 선언된 것은 std 라는 이름공간의 선언없이 접근하겠다는 선언 너무 빈번한 using namespace 의 선언은 이름의 충돌을 막기위한 이름공간 의 선언을 의미 없게 만든다. 따라서 제한적으로 사용할 필요가 있다.
24
이름공간의 별칭 지정과 전역변수의 접근 AAA::BBB::CCC 에 대해 ABC 라는 이름의 별칭 선언 후, 위와 같이 하나의 별칭으로 이름공간의 선언을 대신할 수 있다. 범위지정 연산자는 지역변수가 아닌 전역변수의 접근에도 사용이 가능하다.
25
Chapter 01 이 끝났습니다. 질문 있으신 지요 ?
Similar presentations