3. 클래스와 객체 - class.ppt - classConstructorDestructor.ppt - classExamples.ppt - inline.ppt 3.1 클래스 / 3.2 C++ 클래스 만들기 / 3.3 객체 생성과 객체 활용 - 객체 : 1) 상태 2) 1)번 상태를 읽거나 쓰는 연산 - 클래스 : 객체의 유형(자료형, 타입) - 클래스 선언, 멤버 함수 정의, 객체 선언 및 사용 Q. classExamples.ppt - 일반적으로 객체의 상태는 외부로부터 숨기고 객체가 제공하는 연산을 통해 객체를 다룬다. => C++의 추상 자료형(abstract data type) 데이터 숨기기(data hiding) 캡슐화(encapsulation) cf. C언어의 프로시저 추상화(procedure abstraction) 3.6 접근 지정 / 3.9 바람직한 C++ 프로그램 작성법 3.4 생성자 / 3.5 소멸자 1) 생성자 (Constructor) - 생성자의 정의 - 초기화 섹션 - 생성자 호출 객체 선언(암시적 호출) 명시적 호출로 객체 생성 - 기본 생성자 (Default Constructor) Q. H1 ~ H6까지 채워넣기 - 클래스 형 멤버 변수와 생성자 호출 순서 클래스의 생성자 호출 클래스 형 멤버 변수의 생성자 호출 클래스 형 멤버 변수의 생성자 실행 클래스의 생성자를 실행 Q. 슬라이드 18의 H7 Q. 슬라이드 15의 4가지 질문에 답하시오. (4장 실습문제 1번의 Color 클래스와 3장의 Circle 클래스를 조합한 예제) class Circle { int radius; Color color; public: Circle(); Circle(int radius); Circle(Color c); Circle(int radius, Color c); ... }; Circle::Circle() : radius(1), color(0,0,0) { } Circle::Circle(int r) : radius(r), color(0,0,0) { } Circle::Circle(int r, Color c) : radius(r), color(c) { } Circle c1; Circle c2(10); // 반지름 10, 기본 컬러 Circle c3(20, Color(255,255,255)); // 반지름 20, 검정색 3.7 인라인 함수 Q. 인라인 멤버 함수를 만드는 방법 두가지? Q. 인라인 함수/멤버 함수의 장점과 단점? 3.8 C++ 구조체 - C++에서 구조체는 클래스와 비슷한 기능을 제공하지만, 원칙적으로 구조체에 담긴 데이터는 공개할 의도이고 클래스의 객체에 담긴 데이터는 숨길(연산으로만 공개할) 의도이다. 4. 객체 포인터와 객체 배열, 객체의 동적 생성 - 첨부 슬라이드 pointerCopyDelete.ppt (P. 1~20까지) 4.1 객체 포인터 - 클래스 포인터형은 정수 포인터형의 쓰임새와 다르지 않다. 정수 포인터의 예제 int x; int* p; p = &x; *p = 123; cout << x; // 123 출력 객체 포인터의 예제 Circle donut; Circle* p; p = &donut; (*p).setRadius( 10 ); // 반지름을 10으로 설정 p->setRadius( 10 ); // 반지름을 10으로 설정 (위의 문장과 동일한 의미) cout << (*p).getArea(); // 면적을 출력 cout << p->getArea(); // 면적을 출력 (위의 문장과 동일한 의미) 4.2 객체 배열 - 객체 배열도 정수 배열의 쓰임새와 다르지 않다. 다만, 객체를 선언하면 이 객체의 생성자를 자동으로 호출한다는 점이 다르다. 예제4-3 class Circle { int radius; public: Circle() { radius = 1; cout << "Circle() is called." << endl; } ... ~Circle() { cout << "~Circle() is called.." << endl; } }; Circle circleArray[3]; // cf.int intArray[3]; 위 예제를 실행한 결과는? (힌트) 배열에 포함된 3개의 Circle 객체에 대해 각각 (기본) 생성자를 호출한다. 4.3 동적 메모리 할당 및 반환 4.4 객체와 객체 배열의 동적 생성 및 반환 - new와 delete 연산자 - new[]와 delete[] 연산자 - new와 new[] 연산자로 생성된 정수나 객체가 위치하는 곳은 힙(heap) 지역 변수로 선언된 정수나 객체가 위치하는 곳은 스택(stack) 4.5 this 포인터 - Circle a, b; Circle::setRadius(int radius) { this.radius = radius; } a.setRadius(10);을 호출할 때 this는 &a이고, b.setRadius(20);과 같이 호출할 때 thisms &b이다. - 실습문제 2번 포인터형 멤버 변수를 갖는 클래스 - 실습문제 8번 Family 클래스: 4.1~4.5를 종합한 내용의 예제 4.6 string 클래스를 이용한 문자열 사용 MEMO_CPP_CH2 참고 - string 클래스 활용 예제 1) palindrome 프로그램 2) 입력 받은 텍스트의 줄(line), 단어(word), 알파벳 수를 세는 프로그램