C++

class의 구성요소

성욱박 2018. 9. 12. 19:51

C++'class의 구성요소

 

1. 멤버 변수(member variable)

 

2. 생성자(constructor)<- default로 존재

 

3. 멤버 함수(member function)

 

4. 복사 생성자<- default로 존재

 

5. 소멸자<- default로 존재

 

6. 대입연산자 함수 <- default로 존재

 

 

1. 멤버변수(member variable)

1) 주로 private 접근 지정자 사용

 

 

 

 

 

2. 생성자(constructor)

1) 주로 pupblic 접근 지정자 사용

2) 기능 : 객체등록, 필드 초기화

3) 오버로딩 가능

4) 객체 생성시 자동 호출

5) 'const member function'으로 만들 수 없다.

 

 

 

3. 멤버함수(member function)

1) 주로 public 접근 지정자 사용

2) 외부함수에서 필드를 사용 하기위한 기능

 

4. 복사 생성자

1) 호출시기 :                             A aa;

 객체 생성시 객체를 인자로 줄 경우     A bb(aa);

 객체 생성시 객체를 대입할 경우             A cc = aa;

 메소드의 매개변수로 객체를 선언할 경우            A :: disp(A aa);

 메소드에서 객체를 리턴할 경우             return aa;


2) 종류

1얕은 복사 : default 복사 생성자


2깊은 복사 : 필드를 포인터로 사용 할 경우,  하나의 객체를 두 개의 포인터가 같은 객체를 사용하기 때문에

(주소가 복사되기 때문에) 메모리 문제, 즉 런 타임 에러가 발생하기 때문에 개발자가 직접 객체를 생성해서 값(주소)을 복사해줘야 한다. 이것이 deep copy 기법이다.


*'복사 생성자'의 복사와 '대입 연산자 함수'의 깊은 대입의 차이
복사생성자의 복사는 객체생성시 값이 복사되고 깊은 대입은 객체는 이미 생성되어 있고, 해당 객체로 멤버 대입 연산자 함수를 호출시 복사가 수행된다.

 

 

 

 

5. 소멸자

  1) 정적 메모리 할당으로 stack영역에 생성된 객체가 함수가 끝나고 소멸될때 호출된다.

  2) 기능 : 객체 등록해제

  3) 생성자와 동일하지만 함수명 앞에 ~(틸드)가 붙는다.     ex) ~Car(){};

  4) 오버로딩 불가능

  5) const member function로 만들 수 없다.

  6) virtual 함수로 꼭 만들어서 사용해야 한다.(동적 바인딩을 위해서)

 

*정적 메모리 할당, 동적 메모리 할당 vs 정적 바인딩, 동적 바인딩

메모리할당과 바인딩은 다른개념이다. 메모리할당은 변수선언 또는 객체 생성으로 메모리를 잡는것이고, 바인딩은 힙영역의 객체를 참조 또는 포인터로 가르키는 것이다.//수정필요 보지마세여

 

 

 

6. 대입 연산자 함수 

1) 포인터를 멤버변수로 갖는 클래스의 경우 4가지를 반드시 해줘야한다.


 생성자:동적할당

 복사생성자 : 깊은 복사

 소멸자:메모리해제 

 대입연산자 : 깊은 대입