제 3장. C보다 나은 C++ II.

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제14장 동적 메모리.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
5장 배열 작성자 : 변재현.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
5장. 참조 타입.
07. 디바이스 드라이버의 초기화와 종료 김진홍
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
23장. 구조체와 사용자 정의 자료형 2.
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
메모리 관리 & 동적 할당.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Canary value 스택 가드(Stack Guard).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제 3장. C보다 나은 C++ II

학습 목표 C++의 네임스페이스에 대해 알아본다. C++의 동적 메모리 연산자인 new와 delete에 대해 알아본다. 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스(namespace) 네임스페이스란 식별자가 정의되는 공간을 말한다. 네임스페이스를 이용하면 같은 이름의 식별자를 여러 번 정의하고 구분해서 사용할 수 있다. v 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스의 필요성 (1) 네임스페이스를 사용하지 않는 경우 개발자가 모듈마다 직접 식별자를 구별 하기 위한 접두사를 지정하고 사용 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스의 필요성 (2) 네임스페이스를 사용하는 경우 네임스페이스를 이용해서 식별자를 구조적으로 관리 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스의 정의 네임스페이스를 정의할 때는 namespace 키워드와 함께 네임스페이스 이름을 지정한다. 네임스페이스 이름 namespace UI { int count; void Test() { ... } void ShowMenu() 네임스페이스 이름 변수 정의 함수 정의 v 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스의 사용 네임스페이스 안에 정의된 식별자를 사용할 때는 ‘네임스페이스 이름::식별자’의 형식으로 사용한다. int main() { UI::count = 0; UI::ShowMenu(); UI::Test(); return 0; } 네임스페이스 지정 v 2011-1학기 프로그래밍언어및실습(C++)

using 문 (1) using 네임스페이스이름::식별자; 네임스페이스에 정의된 특정 식별자에 대해서만 네임스페이스 이름을 생략 using UI::count; using UI::Test; count = 10; // UI::count = 10; Test(); // UI::Test(); ShowMenu(); // 컴파일 에러 v 2011-1학기 프로그래밍언어및실습(C++)

using 문 (2) using namespace 네임스페이스 이름; 네임스페이스에 정의된 모든 식별자를 네임스페이스 이름을 생략하고 사용 using NETWORK; count = 10; // NETWORK::count = 10; SendData(); // NETWORK::SendData(); Test(); // NETWORK::Test(); DATA::Test(); // 다른 네임스페이스에 접근할 때는 // 명시적으로 네임스페이스 지정 2011-1학기 프로그래밍언어및실습(C++)

전역 범위 연산자 전역 범위에 정의된 변수나 함수 이름에 접근하려면 네임스페이스 이름 없이 :: 연산자를 지정하고 변수 이름이나 함수 이름을 사용한다. int data = 10; // 전역 변수 void Func() { ... } namespace X { int data = 20; } int main() { using namespace X; int data = 30; // 지역 변수 cout << "data = " << data << "\n"; // 지역 변수 data cout << "data = " << X::data << "\n"; // X::data cout << "data = " << ::data << "\n"; // 전역 변수 data X::Func(); ::Func(); 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스의 범위 네임스페이스와 소스 파일과의 관계는 서로 독립적이다. 하나의 소스 파일에 여러 개의 네임스페이스를 정의할 수 있다. 하나의 네임스페이스를 여러 소스 파일에 걸쳐서 정의할 수 있다. 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스와 분할 컴파일 (1) 네임스페이스의 정의를 여러 소스 파일에서 공유해서 사용하려면 네임스페이스의 정의는 헤더 파일에 넣고, 헤더 파일에서 네임스페이스를 정의할 때 네임스페이스 정의 안쪽에 전역 변수의 extern 선언, 함수의 선언만 넣어준다. 네임스페이스 내에 선언된 전역 변수나 함수는 별도로 소스 파일을 작성하고 소스 파일에서 정의한다. 2011-1학기 프로그래밍언어및실습(C++)

네임스페이스와 분할 컴파일 (2) 2011-1학기 프로그래밍언어및실습(C++)

전역 변수의 extern 선언 전역 변수의 정의는 프로그램 전체에서 단 하나의 소스 파일에 작성하고, 여러 소스 파일에서 전역 변수를 참조해서 사용할 수 있도록 헤더 파일에는 전역 변수의 extern 선언만 넣어준다. 2011-1학기 프로그래밍언어및실습(C++)

같은 헤더 파일을 여러 번 포함하지 않도록 하려면? 2011-1학기 프로그래밍언어및실습(C++)

동적 메모리의 필요성 동적 메모리란 프로그램 실행 중에 메모리의 할당과 해제가 결정되는 메모리를 말한다. 동적 메모리를 사용하면 실행 중에 꼭 필요한 만큼 메모리를 할당 받아서 사용하므로 메모리 낭비가 일어나지 않으며, 미리 정해진 크기가 아니라 원하는 크기만큼 할당 받는 것도 가능하다. 동적 메모리를 사용하면 메모리의 할당과 해제 시점을 전적으로 프로그래머가 제어할 수 있다. 2011-1학기 프로그래밍언어및실습(C++)

정적 메모리 vs. 동적 메모리 2011-1학기 프로그래밍언어및실습(C++)

new 연산자 동적 메모리를 할당하기 위해서는 new 연산자를 사용한다. 할당된 메모리를 초기화하려면 ()를 사용한다. int* p = NULL; p = new int; // 동적 메모리 할당 if( p == NULL ) // 메모리 할당 실패 { // 에러 처리 } p = new int(10); 2011-1학기 프로그래밍언어및실습(C++)

delete 연산자 동적 메모리를 사용이 끝나면 delete 연산자로 해제한다. 2011-1학기 프로그래밍언어및실습(C++)

동적 메모리 사용 예 int main() { int *p = NULL; p = new int(0); // 동적 메모리 할당 및 초기화 if( p == NULL ) cout << "동적 메모리 할당 실패\n"; return 1; } cout << "정수를 입력하세요 : "; cin >> *p; // 동적 메모리 사용 cout << "입력된 정수는 " << p[0] << "\n"; // 동적 메모리 사용 delete p; // 동적 메모리 해제 p = NULL; return 0; v 2011-1학기 프로그래밍언어및실습(C++)

동적 메모리 배열 동적 메모리 배열을 할당할 때는 new[] 연산자를 사용하고 해제할 때는 delete [] 연산자를 사용한다. int num; cin >> num; int *data = new int[num]; for(int i = 0 ; i < num; i++) cin >> data[i]; delete [] data; v 2011-1학기 프로그래밍언어및실습(C++)

new와 delete 사용시 주의사항 (1) 동적으로 할당한 메모리를 자동으로 해제되지 않으므로 반드시 프로그래머가 명시적으로 해제해야 한다. new로 할당한 메모리는 delete로 해제하고, new []로 할당한 메모리는 delete []로 해제한다. char *msg = “Hello World”; char *str = new char[strlen(msg) + 1]; strcpy(str, msg); // 동적 메모리를 해제하지 않으므로 문제 short *tmp = new short[100]; ... // 동적 메모리 배열의 사용 delete tmp; // delete[]로 해제하지 않았으므로 실행 에러 v 2011-1학기 프로그래밍언어및실습(C++)

new와 delete 사용시 주의사항 (2) delete 연산자로 이미 해제된 메모리를 다시 해제해서는 안 된다. 동적 메모리를 해제한 다음 동적 메모리의 시작 주소를 저장하는 포인터 변수를 널 포인터로 만든다. long *arr = new long[10]; ... // 동적 메모리 배열의 사용 delete[] arr; delete[] arr; // 해제된 메모리를 다시 해제하므로 실행 에러 long *arr = new long[10]; ... // 동적 메모리 배열의 사용 delete[] arr; arr = NULL; delete[] arr; // 널 포인터를 해제하면 아무 일도 하지 않음 2011-1학기 프로그래밍언어및실습(C++)

동적 메모리의 활용 (1) 함수 안에서 만들어진 데이터의 리턴 char* NumberToString(int n) { char *p = new char[20]; sprintf(p, "%d", n); return p; } int main() int num; cout << "정수를 입력하세요 : "; cin >> num; char *str = NumberToString(num); cout << "문자열로 변환된 값 : " << str << "\n"; delete [] str; return 0; 2011-1학기 프로그래밍언어및실습(C++)

동적 메모리의 활용 (2) 크기가 늘어나는 배열의 사용 2011-1학기 프로그래밍언어및실습(C++)

정리 네임스페이스는 프로그램에서 식별자가 정의되는 논리적인 공간을 제공한다. 네임스페이스를 이용하면 프로그램 내의 식별자를 관리하기가 쉬워진다. 네임스페이스에 정의된 식별자를 사용하려면 ‘네임스페이스 이름::식별자’의 형식으로 사용한다. using 문을 이용하면 네임스페이스에 정의된 식별자를 사용할 때 네임스페이스 이름을 생략할 수 있다. C++ 프로그램에서 동적 메모리를 사용하려면 new 연산자와 delete 연산자를 이용한다. 동적 메모리를 사용하면 실행 중에 꼭 필요한 만큼 할당하고, 프로그래머가 원하는 동안에만 메모리를 사용할 수 있다. new 연산자를 동적 메모리를 할당하고 delete 연산자는 동적 메모리를 해제한다. 만일 동적 메모리를 할당만 하고 해제하지 않으면 문제가 되므로 주의해서 사용해야 한다. 배열을 동적 메모리에 할당하려면 new[] 연산자를 사용하고 해제할 때는 delete[] 연산자를 사용한다. new와 delete, new[]와 delete[]는 반드시 한 쌍으로 사용해야 한다. 2011-1학기 프로그래밍언어및실습(C++)