Chapter 2 C++ 함수와 네임스페이스. 최호성.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Chapter 01. C 언어 기반의 C++ 1 정충교 ). 강좌 운영 2  선수과목  컴퓨터프로그래밍 1(100811)  컴퓨터프로그래밍 2(100812)  교재  열혈 C++ 프로그래밍, 인피니티북스, 윤성우저  평가  중간 : 25%, 기말 : 35%,
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 01. C 언어 기반의 C++ 1.
제2장 C 언어의 확장 C++(1).
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
최윤정 Java 프로그래밍 클래스 상속 최윤정
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
컴퓨터 프로그래밍 기초 [Final] 기말고사
윤 홍 란 다형성과 가상 함수 윤 홍 란
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
제 3장. C보다 나은 C++ II.
명품 C++ 7장 프렌드와 연산자 중복.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
자바 5.0 프로그래밍.
Lesson 7. 클래스와 메소드 - 1.
14. 예외처리.
10장. 예외처리.
11장. 1차원 배열.
제 2장. C보다 나은 C++ I.
13. 연산자 오버로딩.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
Chapter 3 클래스. 최호성.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
7장 인터페이스와 추상 클래스.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
명품 C++ 9장 가상 함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 02. 자바 기본 문법.
Chapter 08. 함수.
C++ Espresso 제11장 예외 처리와 형변환.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
12. 상속 : 고급.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
제 6 장 함수(functions).
Chapter 13. 템플릿(Template) 1
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
함수, 모듈.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
16장. 변수, 연산자, 사용자 정의 함수 변수 배열과 객체 연산자 함수.
9 브라우저 객체 모델.
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
Presentation transcript:

http://www.ilit.co.kr cx8537@naver.com 최호성

Chapter 2 C++ 함수와 네임스페이스

디폴트 매개변수, 다중 정의, 인라인 함수, 네임스페이스 2장의 핵심 개념 디폴트 매개변수, 다중 정의, 인라인 함수, 네임스페이스 디폴트 매개변수 : 기본값을 정해서 함수 이름만 쓰면 함수를 호출합니다. 다중 정의 : 이름은 같지만 매개변수 구성이 다른 함수를 정의합니다. 인라인 함수 : 함수와 매크로의 장점을 모았습니다. 네임스페이스 : 함수, 변수 등에 소속을 부여하고 보다 체계적으로 관리할 수 있습니다.

함수 매개변수의 디폴트 값을 선언에 명시하는 문법. 호출자 코드에서 실인수를 생략한 채 호출할 수 있다. 디폴트 매개변수 함수 매개변수의 디폴트 값을 선언에 명시하는 문법. 호출자 코드에서 실인수를 생략한 채 호출할 수 있다. #include "stdafx.h" #include <iostream> // nParam 매개변수의 디폴트 값은 10이다. int TestFunc(int nParam = 10) { return nParam; } int _tmain(int argc, _TCHAR* argv[]) // 호출자가 실인수를 기술하지 않았으므로 디폴트 값을 적용한다. std::cout << TestFunc() << std::endl; // 호출자가 실인수를 확정했으므로 디폴트 값을 무시한다. std::cout << TestFunc(20) << std::endl; return 0;

매개변수가 여럿이면 오른쪽 매개변수부터 디폴트 값을 선언할 수 있다. 디폴트 매개변수 매개변수가 여럿이면 오른쪽 매개변수부터 디폴트 값을 선언할 수 있다. #include "stdafx.h" #include <iostream> int TestFunc(int nParam1, int nParam2 = 2) { return nParam1 * nParam2; } int _tmain(int argc, _TCHAR* argv[]) std::cout << TestFunc(10) << std::endl; std::cout << TestFunc(10, 5) << std::endl; return 0;

디폴트 매개변수 피호출자 함수 매개변수의 디폴트 값을 반드시 오른쪽 매개변수부터 기술한다. 문법 및 활용상 주의사항 피호출자 함수 매개변수의 디폴트 값을 반드시 오른쪽 매개변수부터 기술한다. 호출자가 정의한 실인수는 왼쪽 매개변수에서부터 순서대로 매핑된다. 매개변수가 여럿이고 왼쪽 첫 번째에 대해 디폴트 값을 선언하려면 오른쪽 모든 매개변수에 대해 디폴트 값을 선언해야 한다. 따라서 다음과 같은 선언은 불가능하다. int TestFunc(int nParam1 = 5, int nParam2, int nParam3 = 10);

함수 다중 정의 이름이 같은 함수를 여러 번 정의하는 문법이다. Function overloading 이름이 같은 함수를 여러 번 정의하는 문법이다. 이름은 같더라도 매개변수 구성은 다르게 선언 및 정의해야 한다. 디폴트 매개변수 문법과 조합됐을 때 대상함수 식별에 대한 ‘모호성’ 발생할 수 있으므로 주의해야 한다. 함수 템플릿으로 대체할 수 있다.

함수 다중 정의 int Add(int a, int b, int c) int Add(int a, int b) 이름이 같은 함수 여러 개가 공존하는 문법이다. int Add(int a, int b, int c) { std::cout << "Add(int, int, int): "; return a + b + c; } int Add(int a, int b) std::cout << "Add(int, int): "; return a + b; double Add(double a, double b) std::cout << "Add(double, double): ";

함수 템플릿 template <typename T> 에서 T는 자료형이다. 자료형에 대해 의존성이 없는 함수를 정의하는 문법이다. template <typename T> 에서 T는 자료형이다. 템플릿은 일종의 틀이며 판화를 인쇄하는 것처럼 함수를 인쇄하기 위한 원본이다. template <typename T> T Add(T a, T b) { return a + b; } int _tmain(int argc, _TCHAR* argv[]) std::cout << Add(3, 4) << std::endl; std::cout << Add(3.3, 4.4) << std::endl; return 0;

inline 함수는 매크로의 장점을 함수에 적용한 특수 함수이다. 인라인 함수 inline 함수는 매크로의 장점을 함수에 적용한 특수 함수이다. 컴파일러 최적화에 대해서는 C언어의 const, volatile 형한정어에 대해 적용하는 이론과 동일하다. 다음 두 온라인 강좌를 참고한다. https://www.youtube.com/watch?v=IT3iEdnwsRs (독하게 시작하는 C 프로그래밍 15장 변수와 상수 고급이론 강좌) Alt + F7(프로젝트 속성) > 구성속성 > C/C++ > 최적화 순으로 선택하고 오른쪽 목록에서 인라인 함수 확장에 대해 살펴본다.

inline 함수는 매크로의 장점을 함수에 적용한 특수 함수이다. 인라인 함수 inline 함수는 매크로의 장점을 함수에 적용한 특수 함수이다. 인라인 함수는 외형상 함수이나 컴파일 과정에서 함수가 아닌 일반 구문으로 처리된다. 함수 호출시 Stack frame에 변화가 없다. 일반 선언 앞에 inline 예약어를 붙여 선언한다. 일반적으로 컴파일러가 알아서 inline 확장을 시도한다. 따라서 굳이 inline이라고 선언하지 않더라도 inline 함수로 번역될 수 있다. 컴파일러 최적화와 밀접하게 관련된 문법이다.

네임스페이스 namespace TEST { int g_nData = 100; void TestFunc(void) std::cout << "TEST::TestFunc()" << std::endl; } int _tmain(int argc, _TCHAR* argv[]) TEST::TestFunc(); std::cout << TEST::g_nData << std::endl; return 0;

using 선언을 통해 네임스페이스를 생략할 수 있다. // std 네임스페이스를 using 예약어로 선언한다. using namespace std; namespace TEST { int g_nData = 100; void TestFunc(void) // cout에 대해서 범위를 지정을 하지 않아도 상관없다. cout << "TEST::TestFunc()" << endl; } // TEST 네임스페이스에 using 선언을 한다. using namespace TEST; int _tmain(int argc, _TCHAR* argv[]) // TestFunc()나 g_nData에 대해서도 범위 지정을 할 필요가 없다. TestFunc(); cout << g_nData << endl; return 0;

네임스페이스를 중첩해 선언할 수 있다. 그리고 속한 네임스페이스가 다르다면 이름이 같은 변수라도 다른 변수로 취급된다. 네임스페이스를 중첩해 선언할 수 있다. 그리고 속한 네임스페이스가 다르다면 이름이 같은 변수라도 다른 변수로 취급된다. namespace TEST { int g_nData = 100; namespace DEV int g_nData = 200; namespace WIN int g_nData = 300; } int _tmain(int argc, _TCHAR* argv[]) cout << TEST::g_nData << endl; cout << TEST::DEV::g_nData << endl; cout << TEST::DEV::WIN::g_nData << endl; return 0;

식별자 검색 순서 현재 블록 범위 현재 블록 범위를 포함하고 있는 상위 블록 범위. (최대 함수 몸체까지) 전역 함수인 경우 현재 블록 범위 현재 블록 범위를 포함하고 있는 상위 블록 범위. (최대 함수 몸체까지) 가장 최근에 선언된 전역 변수나 함수 using 선언된 네임스페이스 혹은 전역 네임스페이스. 단, 두 곳에 동일한 식별자가 존재할 경우 컴파일 오류 발생

식별자 검색 순서 현재 블록 범위 현재 블록 범위를 포함하고 있는 상위 블록 범위. (최대 함수 몸체까지) 클래스 멤버 클래스 메서드인 경우 현재 블록 범위 현재 블록 범위를 포함하고 있는 상위 블록 범위. (최대 함수 몸체까지) 클래스 멤버 부모 클래스 멤버 가장 최근에 선언된 전역 변수나 함수 호출자 코드가 속한 네임스페이스의 상위 네임스페이스 using 선언된 네임스페이스 혹은 전역 네임스페이스. 단, 두 곳에 동일한 식별자가 존재할 경우 컴파일 오류 발생