[c++] class , object ( 클래스, 객체) 본문

객체지향프로그래밍 (C++)

[c++] class , object ( 클래스, 객체)

미니모아 2020. 7. 7. 14:37
반응형
  1. class 키워드 사용
  2. public과 같은 접근 제어와 관련된 키워드 사용
  3. 멤버 함수(메서드)를 정의할 수 있다.
class Point {
public:
    int x, y;
    void Print() {
        cout << x << "," << y << endl;
    };
    void Print(int a) {
        cout << a << ":" << x << "," << y << endl;
    };
};
int main()
{
    Point p1, p2;
    p1.x = 10;
    p1.y = 10;
    p2.x = 20;
    p2.y = 20;

    p1.Print();
    p2.Print(10);
    return 0;
}
  • 클래스 정의 밖에서 함수를 정의 하는 경우

    1. 클래스 정의 안에는 메서드의 프로토 타입만 남겨둔다.

    2. 클래스 정의 밖에서는 범위 지정 연산자를 사용해서 함수를 정의

      class Point {
      public:
       int x, y;
       void Print();
      }; 
      
      void Point :: Print(){ 
          cout << x << "," << y << endl;  };  
  • 생성자, 소멸자

    1. 생성자 : 객체를 생성할 때 자동적으로 호출되는 함수

    2. 소멸자 : 객체가 소멸될 때 자동적으로 호출되는 함수

      class Point {
      public:
       int x, y;
       Point(); // 생성자는 리턴 타입이 없다, 클래스의 이름과 같다. 
       Point(int _x, int _y);//생성자 오버로딩
       void Print();
      }; 
      
      void Point :: Print(){ 
          cout << x << "," << y << endl;
      };  
      Point::Point() { 
      x = 0;
      y = 0; 
      };  
      Point::Point(int _x, int _y) { 
      x = _x;
      y = _y; 
      };
      
      int main()  
      { 
        Point p1, p2,p4(200,150);
        p1.x = 10;
        p1.y = 10;
        p2.x = 20;
        p2.y = 20;
      
        p4.Print();
      
        Point p3 = p2; // 복사 생성 : 초기화
        p3.Print();
        p3 = p1;//대입
        p3.Print();
        return 0; 
      
      }
      
  • 복사 생성자
    자신과 동일한 타입의 객체에 대한 레퍼런스를 인자로 받는 생성자 (얕은 복사임)

    (생략)
    Point::Point(const Point& pt) {
      cout << "Copy constructor !" << endl;
      x = pt.x;
      y = pt.y;
    }
    int main()
    {   
      Point p3 = p2; // 초기화 복사 생성자 출력 
      Point p6(p1);
      return 0;
    }
  • 생성자에서 초기화가 필요한 멤버 변수 (const, reference)

    class NeedConstructor {
    public:
      const int max;
      int& ref;
      int temp;
      NeedConstructor();
      NeedConstructor(int cnt, int& number);
    };
    NeedConstructor::NeedConstructor() :
      max(100), ref(temp) {
      temp = 10;
    };
    NeedConstructor::NeedConstructor(int cnt, int& number):
      max(cnt), ref(number) {
      temp = 10;
    }; 
    int main() {  
      NeedConstructor cr;  
      int num = 400;  
      NeedConstructor cr2(500,num);  
      cout << cr.max << endl;  
      cout << cr.ref << endl;  
      cout << cr2.max << endl;  
      cout << cr2.ref << endl; 
     }
    
  • 소멸자
    객체가 사용한 리소스 정리, main 함수가 끝나는 시점에 동작

    class DynamicArray {
    public:
      int* arr;
      DynamicArray(int arraySize);//생성자
      ~DynamicArray();//소멸자
    };
    DynamicArray::DynamicArray(int arraySize) {
      arr = new int[arraySize];
    }; 
    DynamicArray::~DynamicArray() {//소멸자
      delete arr;
      arr = NULL;
    };
    int main() {
      int size;
      cout << "정수 몇 개?" << endl;
      cin >> size;
      DynamicArray da(size);
      for (int i = 0; i < size; ++i)
          cin >> da.arr[i];
      for (int i = size - 1; i >= 0; --i)
          cout << da.arr[i] << " ";
      cout << "\n";
      return 0;
    }
  • 정적(static) 멤버 제어
    모든 객체가 공유하는 멤버 변수

    class Student{
    public:
      string name;
      int sNo;
    public:
      static int student_cout;
      static void PrintStdCount();
    };
    int Student::student_cout = 0;
    void Student::PrintStdCount(){
    };
  • 접근 제어
    내부 public 메소드로 모두 접근 가능

    • public
    • protected :외부 접근 불가
    • private:외부 접근 불가
반응형

'객체지향프로그래밍 (C++)' 카테고리의 다른 글

[c++] Pointer (포인터)  (0) 2020.07.07
[c++] inline variable  (0) 2020.07.07
[c++] Header  (0) 2020.07.06
[c++] string(문자열)  (0) 2020.07.06
[c++] dynamic memory allocation (동적 메모리 할당) ②  (0) 2020.07.06
Comments