• 클래스 생성자

개념 : 객체가 생성될때 호출되는 함수

생성자가 없다면 객체는 생성 될 수 없다

 

아무래도 생성될 때 호출이 되다보니 초기화 기능과 굉장히 잘 부합한다

생성자의 이름은 클래스 이름과 같고 리턴 자료형이 없음에도 void를 기술하지 않는다

 

생성자의 호출에 있어서 명시적호출, 암시적호출이 있다

생성자 함수명의 유무에 차이가 있는듯하다

 

소괄호가 아닌 중괄호로 초기화 한 부분은 리스트 초기화 구문이다

중괄호 안의 값들과 생성자의 매개변수들을 매칭시켜주는 것

 

생성자는 오버로딩도 가능하다

객체의 여러가지 초기화 버전을 갖출 수 있겠다

 


  • 디폴트 생성자

개념 : 매개변수를 기술하지 않아도 되는 생성자

 

디폴트 생성자는 암시적 버전과 명시적 버전이 있다

 

암시적 버전

 

생성자를 작성하지 않으면 C++에서 자동으로 생성자를 만들어 호출해준다

물론 아무일도 하지않는다

[ 사용자 정의 생성자를 작성하면 자동으로 생성되지 않는다 

=  초기화되지 않은 객체의 생성을 사용자가 원하지 않을 수도 있기 때문]

 

명시적 버전

 

사용자 정의 생성자로 매개변수를 기술하지 않아도 호출될 수 있는 생성자를 뜻한다

 

이는 두가지가 있다

사용자는 하나의 디폴트 생성자만 가질수가 있다

 

그렇기 때문에 저 두 생성자를 동시에 사용 할 수 없다

 

주의할 점 하나는 암시적으로 생성자를 사용할 때 소괄호를 사용하면 안된다

"cout<< 생성됨" 이 출력되지 않음

 

이 디폴트 생성자의 필요성은 클래스 배열을 생성할때 꼭 필요하다는 점이다


  • 파괴자

개념 : 객체의 수명이 끝날 때 자동으로 호출이 됨

         객체의 흔적을 지우는 역할과 잘 부합한다

 

생성자와 마찬가지로 사용자 정의 파괴자가 없다면 자동으로 디폴트 파괴자를 생성하여 호출한다

그리고 파괴자는 매개변수를 가지지 못한다

 

파괴자의 호출은 일반적으로 사용자가 코드에 명시적으로 호출하지 않는다

(뒤에 나오는 한가지 예외가 있다고한다)

 

객체의 기억공간에서 벗어난다면 자동으로 호출이 된다

 


  • 내가 헷갈릴만한 것

임시객체부분

결과

선언과 동시에 생성자를 쓰는 부분은 생성자가 한번 호출 된다

[ 컴파일러에 따라 임시객체의 생성 유무가 다르다. 내가 사용하는 환경은 임시객체를 생성하지 않는다 ]

 

선언이 아닌 대입으로 생성자를 사용하는 부분은 임시객체를 생성하고 대입 후 파괴한다

[ 단 이건 컴파일러에 따라 임시객체를 유지하는 시간이 다르다 ]

 

 

생성자만 호출

생성자만 호출되어도 객체가 생성됨


  • const 멤버 함수

 

객체 Test는 값이 변경되면 안되는 const 객체이다

 

컴파일러가 보기에 이 Test객체의 TestFunc이 값을 변경하는지 안하는지 모르니까 컴파일러는 에러를 띄워준다

 

그래서 이 함수는 값을 변경하지 않으니까 안심해 라는 뜻으로 함수선언 소괄호 뒤에 const를 붙여준다

 

const멤버함수를 선언하고 멤버함수의 값을 변경하면 당연히 안된다

 


  • this포인터

객체의 멤버함수들은 기본적으로 this라는 숨은 매개변수를 가지고 있다

 

멤버함수를 호출하면 호출 된 멤버함수는 자신을 호출한 객체를 포인터로 매개변수로 받아오는데

그것을 사용하는게 this 이다

함수 내부에 자동으로 ClassName * const 형으로 선언됨

 

예로 어떠한 상황에서 자기자신을 리턴해주는 경우가 필요한데 이때 사용이 가능하다

 

+ Recent posts