[CPP] 클래스와 객체

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), 알파벳 수를 세는 프로그램






Leave a Reply

Your email address will not be published. Required fields are marked *