본문 바로가기
C++

C++

by Doromi 2019. 5. 4.
728x90
반응형

생성자

멤버 변수의 초기화
클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성된다.
이 객체는 모든 멤버 변수를 초기화하기 전에는 사용할 수 없다.

객체의 멤버 변수는 사용자나 프로그램이 일반적인 초기화 방식으로 초기화 할 수 없다.

그 이유는, 객체의 멤버 중에는 private 멤버도 있으므로, 이러한 private  멤버에 직접 접근할 수 없기 때문이다.

 

따라서 private 멤버에 접근 할 수 있는 초기화만을 위한 public 함수가 필요하다.
이러한 초기화 함수는 객체가 생성된 후부터 사용되기 전까지 반드시 멤버의 초기화를 위해 호출되어야 한다.

객체의 생성과 동시에 멤버 변수를 초기화해주는 생성자(constructor)라는 멤버 함수를 제공한다.
클래스 생성자의 이름은 해당 클래스의 이름과 같다.


생성자의 특징

 

  • 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
  • 생성자는 반환값이 없지만, void형으로 선언하지 않는다.
  • 객체를 초기화하는 방법이 여러 개 존재할 경우에는 오버로딩 규칙에 따라 여러 개의 생성자를 가질 수 있다.

 

 

디폴트 생성자(default constructor)

 

객체가 생성될 때 사용자가 초깃값을 명시하지 않으면, 컴파일러가 자동으로 제공하는 생성자

 

사용자로부터 인수를 전달받지 않으므로, 매개변수를 가지지 않는다.
매개변수를 가지지 않으므로 대부분의 디폴트 생성자가 0이나 NULL, 빈 문자열 등으로 초기화를 진행한다.

 

c++에서 사용자가 직접 디폴트 생성자를 정의하는 방법은

  1. 함수 오버로딩을 이용한 방법
  2. 디폴트 인수를 이용한 방법

 

Book::Book(const string& title = "웹 프로그래밍", int total_page = "100");

모든 인수에 디폴트 값을 명시하면, 인수를 전달하지 않고도 객체를 생성할 수 있는 디폴트 생성자가 된다.

 

 

복사 생성자

 

  1. 얕은 복사

    대입연산자를 이용한 객체의 대입은 얕은 복사(shallow copy)로 수행된다.

    얕은 복사란 값을 복사하는 것이 아닌, 값을 가리키는 포인터를 복사하는 것
    변수의 생성에서 대입 연산자를 이용한 값의 복사는 문제가 되지 않지만, 객체에서는 문제가 발생할 수도 있다.

  2. 복사 생성자 (깊은 복사)

    자신과 같은 클래스 타입의 다른 객체에 대한 참조를 인수로 전달받아,
    그 참조를 가지고 자신을 초기화하는 방법이다.

    새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성을 가지게 해준다.
    복사 생성자를 이용한 대입은 깊은 복사(deep copy)를 통한 값의 복사이기 때문이다.


복사 생성자는

  1. 객체가 함수에 인수로 전달될 때
  2. 함수가 객체를 반환값으로 반환할 때
  3. 새로운 객체를 같은 클래스 타입의 기존 객체와 똑같이 초기화할 때
728x90
반응형

'C++' 카테고리의 다른 글

C++  (0) 2019.05.05
C++  (0) 2019.05.04
C++  (0) 2019.05.04
C++  (0) 2019.05.04
C++  (0) 2019.05.04