It won't hurt to try

[C++/윈도우프로그래밍응용]15. 복사 생성자와 정적 변수 본문

C++/윈도우프로그래밍응용

[C++/윈도우프로그래밍응용]15. 복사 생성자와 정적 변수

yongki.doki 2021. 10. 9. 11:13

복사 생성자(copy constructor)

객체를 복사해서 객체를 생성할 때 사용되는 생성자

객체의 멤버 변수에 동일한 값으로 객체를 새로이 생성하고자 할 때 사용

class MyClass {
  int nNum;
public:
  MyClass();
  MyClass (const MyClass& other) {
    // 멤버변수의 복사를 진행
    // other.nNum이 private일텐데 접근이 가능한 이유는 자기자신의 객체이기 때문이다.
    this->nNum = other.nNum;
  }
}

사용 예)

1. 같은 종류의 객체로 초기화 하는 경우

MyClass obj(obj2);

 

2. 객체 인수를 함수에 전달(call by value) 하는 경우

MyClass func(MyClass myClass) {

}

 

3. 함수 내부에서 객체를 반환하는 경우

MyClass func() {

    MyClass tmp;

    return tmp;

}

함수 내에서 생성된 객체는 함수가 끝나면 소멸하게 된다.

하지만 return하는 객체의 경우 복사 생성자를 호출해서 객체를 생성하게 된다.

복사생성자의 자동정의

기본 복사 생성자는 컴파일러를 통해 자동으로 생성

하지만 멤버변수가 포인터변수로 되어 있는 경우는 직접 복사생성자를 사용해야한다.

대입연산자 = 를 사용하는 경우

대입연산자 = 사용 시 -> 복사 생성자가 호출되지 않음

MyClass obj1;
MyClass obj2;
obj2 = obj1;

복사 생성자는 언제 생성될까?

객체가 새롭게 생성될 때만 호출

MyClass obj1;
MyClass obj2 = obj1;
MyClass obj3(obj1);
MyClass obj4{obj1};

정적변수

static키워드

객체 전체에 변수, 멤버 함수를 하나만 생성

  • 객체가 여러 개 생성되어도 하나만 생성됨
  • 모든 클래스가 공유하여 사용가능한 변수, 함수를 생성
  • ststic 키워드를 이용하여 선언 후 사용
  • 정적 변수 -> 클래스 변수(class variable) 라고도 부름
  • 정적 멤버 함수 -> 객체를 생성하지 않고도 호출 가능

정적 상수(Static Constant)

객체 전체에 상수를 하나만 생성

  • 선언과 동시에 초기화 가능
  • 메모리 절약 가능
const static int MAX_COUNT = 10;

 

300x250
300x250
Comments