제 6장. 생성자와 소멸자 2012-1학기 프로그래밍언어및실습 (C++).

Slides:



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

SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
제14장 동적 메모리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
Lesson 5. 레퍼런스 데이터형.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
자바 5.0 프로그래밍.
23장. 구조체와 사용자 정의 자료형 2.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
자바 5.0 프로그래밍.
제 2장. C보다 나은 C++ I.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
24장. 파일 입출력.
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
Chapter 02. 자바 기본 문법.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
멤버함수 중첩( 복사 생성자 ) - 연사자 중첩 - 동적 메모리를 가지는 클래스를 지원 하도록 멤버 함수 작성
JA A V W. 06.
12. 상속 : 고급.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

제 6장. 생성자와 소멸자 2012-1학기 프로그래밍언어및실습 (C++)

학습 목표 클래스의 객체를 초기화하기 위한 방법을 알아본다. 생성자와 기본 개념을 이해하고 생성자를 정의하는 방법을 알아본다. 소멸자의 기본 개념을 이해하고 알고 소멸자를 정의하는 방법을 알아본다 복사 생성자에 대하여 알아본다. 2012-1학기 프로그래밍언어및실습 (C++)

객체의 생성 및 소멸 객체가 생성될 때 생성자가 자동으로 호출된다. 객체가 소멸될 때 소멸자가 자동으로 호출된다. 생성자는 객체가 만들어질 때 객체를 초기화한다. 객체가 소멸될 때 소멸자가 자동으로 호출된다. 소멸자는 객체가 소멸될 때 정리 작업을 수행한다. v 2012-1학기 프로그래밍언어및실습 (C++)

생성자와 소멸자 생성자와 소멸자는 자동으로 호출되는 함수이다. 생성자는 객체를 초기화하고, 소멸자는 객체를 정리한다. 생성자와 소멸자는 클래스 이름과 같은 이름의 함수이다. 생성자는 “클래스이름()” 형식의 함수이고 소멸자는 “~클래스이름()” 형식의 함수이다. 생성자와 소멸자는 리턴 값이 없으며 리턴 형으로 void를 사용하지도 않는다. 생성자는 인자를 가질 수 있고, 소멸자는 인자를 가질 수 없다. v 2012-1학기 프로그래밍언어및실습 (C++)

디폴트 생성자 인자 없는 생성자를 말한다. 객체를 생성할 때 별도로 지정하지 않으면 항상 디폴트 생성자로 초기화된다. v 2012-1학기 프로그래밍언어및실습 (C++)

인자 있는 생성자 객체를 특정 값으로 초기화하려면 생성자에 인자를 전달해서 처리한다. 생성자는 오버로딩 가능하다. 생성자의 인자 전달 방법 void Stack::Initialize(int size) { m_size = size; m_top = -1; m_buffer = new int[m_size]; memset(m_buffer, 0, sizeof(int) * m_size); } Stack::Stack(int size) { m_size = size; m_top = -1; m_buffer = new int[m_size]; memset(m_buffer, 0, sizeof(int) * m_size); } 변경 v 2012-1학기 프로그래밍언어및실습 (C++)

변환 생성자 인자가 하나인 생성자는 형 변환에 이용될 수 있다. class String { protected: char* m_str; // 문자열을 저장하는 동적 메모리에 대한 포인터 public: String(const char* s); // 변환 생성자 ... }; int main() { String s1 = “abc”; // String s1 = String(“abc”);로 처리된다. } 2012-1학기 프로그래밍언어및실습 (C++)

explicit 생성자에 explicit 키워드를 지정하면 해당 생성자가 명시적인 객체의 초기화에만 사용될 뿐 암시적인 형 변환에서는 사용될 수 없다. class String { public: explicit String(const char* s); ... }; int main() { String s1 = “abc”; // 암시적인 형 변환이 불가능하므로 컴파일 에러 Test(“Good-bye”); // 암시적인 형 변환이 불가능하므로 컴파일 에러 String s1 = String(“abc”); // 명시적 형 변환은 OK Test( String(“Good-bye”); // 명시적 형 변환은 OK } 2012-1학기 프로그래밍언어및실습 (C++)

초기화 리스트 (1) const 변수나 레퍼런스 변수는 생성될 때 초기화는 가능하지만 생성된 변수에 값을 대입하는 것은 불가능하다. 멤버 변수가 const 변수이거나 레퍼런스 변수일 때는 특별한 방법으로 초기화해야 한다.  초기화 리스트 2012-1학기 프로그래밍언어및실습 (C++)

초기화 리스트 (2) 초기화 리스트 클래스이름::클래스이름( 인자리스트 ) : 멤버변수이름(초기값), 멤버변수이름(초기값), ... { } v 2012-1학기 프로그래밍언어및실습 (C++)

임시 객체 객체 없이 생성자를 호출하면 임시 객체가 생성된다. 다음 문장으로 넘어갈 때 임시 객체는 자동으로 소멸된다. 함수에 인자를 전달하거나 형 변환을 수행할 때 유용하게 사용된다. 2012-1학기 프로그래밍언어및실습 (C++)

소멸자 소멸자는 객체가 소멸될 때 자동으로 호출되는 함수이다. 소멸자는 “~클래스 이름()” 형식의 함수이다. 소멸자는 객체가 소멸되기 전에 반드시 수행해야 할 정리 작업을 처리하는 데 사용된다. 소멸자는 “~클래스 이름()” 형식의 함수이다. 소멸자는 인자를 가질 수 없기 때문에 오버로딩할 수 없다. v 2012-1학기 프로그래밍언어및실습 (C++)

객체 간의 초기화와 대입 클래스의 객체는 같은 클래스의 객체 간에 서로 초기화나 대입이 가능하다. 객체 간의 초기화는 같은 클래스의 다른 객체와 같은 값을 갖도록 초기화하는 것이다. 클래스의 멤버 변수를 1대1로 초기화한다. 객체 간의 대입은 같은 클래스의 다른 객체의 값을 대입하는 것이다. 클래스의 멤버 변수를 1대1로 대입한다. v Stack s1(5); Stack s2 = s1; // 객체 간의 초기화 Stack s3; s3 = s1; // 객체 간의 대입 2012-1학기 프로그래밍언어및실습 (C++)

디폴트 멤버 함수 개발자가 따로 정의하지 않으면 컴파일러에 의해서 제공되는 함수 디폴트 생성자 디폴트 소멸자 디폴트 복사 생성자 디폴트 대입 연산자 v 2012-1학기 프로그래밍언어및실습 (C++)

복사 생성자 (1) 멤버 변수 중에 포인터 변수가 있을 때 포인터 변수가 가리키는 데이터를 복사하는 대신 주소만 복사하는 것을 얕은 복사(shallow copy)라고 한다. 클래스 안의 멤버 변수 중 포인터 변수가 있고, 포인터 변수가 동적 메모리를 가리킬 때 올바른 처리를 위해서 복사 생성자, 대입 연산자, 소멸자 등을 직접 정의해야 한다. v 2012-1학기 프로그래밍언어및실습 (C++)

복사 생성자 (2) 포인터의 주소를 복사하는 대신 포인터가 가리키는 데이터를 복사하는 것을 깊은 복사(deep copy)라고 한다. v 2012-1학기 프로그래밍언어및실습 (C++)

복사 생성자 (3) class Stack { ... Stack(const Stack& s); // 복사 생성자 }; m_size = s.m_size; m_top = s.m_top; m_buffer = new int[m_size]; memcpy(m_buffer, s.m_buffer, sizeof(int) * (m_top+1)); } 2012-1학기 프로그래밍언어및실습 (C++)

정리 클래스의 객체가 생성될 때 생성자가 자동으로 호출되고, 클래스의 객체가 소멸될 때 소멸자가 자동으로 호출된다. 생성자는 객체를 사용할 수 있도록 ‘준비’하는 함수이고, 소멸자는 객체의 ‘정리’를 수행하는 함수이다. 생성자는 “클래스 이름()” 형식의 함수이고 소멸자는 “~클래스 이름()” 형식의 함수이다. 생성자는 오버로딩 가능하고, 소멸자는 오버로딩할 수 없다. 생성자 중 인자가 하나인 생성자를 변환 생성자라고 한다. 멤버 변수 중에 반드시 초기화해야하는 멤버 변수, 즉 const 멤버 변수나 레퍼런스 멤버 변수는 초기화 리스트를 이용해서 초기화한다. 같은 클래스의 객체 간에 초기화나 대입이 가능하다. 같은 클래스의 객체를 이용해서 초기화하는 생성자를 복사 생성자라고 한다. 복사 생성자를 따로 정의하지 않으면 컴파일러가 디폴트 복사 생성자를 제공한다. 2012-1학기 프로그래밍언어및실습 (C++)