클래스의 기초, 생성자와 소멸자
📒 멤버 함수의 외부 정의
class A{
public:
int var;
void getVar();
}
void A::getVar(){
cout << var << endl;
}
멤버 함수가 클래스 내부에 정의되면 인라인 함수가 된다.
멤버 함수가 클래스 외부에 정의되면 일반적인 함수와 동일하게 호출된다. 스택에 인자들을 저장하고 복귀 주소를 저장한 후에 멤버 함수로 제어가 이동된다
💡 UML에서 멤버 변수나 함수 옆에 가시성 표시자로 +는 public, -는 private를 의미한다.
실선에 속이 빈 삼각형 화살표는 상속을 나타낸다. 방향표 쪽에 있는 클래스가 부모 클래스.
✔ 생성자에서 다른 생성자 호출하기.
- 생성자들은 보통 비슷한 초기화 작업을 수행하기 때문에 하나의 생성자에서 다른 생성자를 호출하는 경우도 많다.
class Car{
int speed;
int gear;
public:
Car(int a, int b){
speed = a;
gear = b;
}
Car(int a){
Car(a,0); //요런식으루
}
💡 생성자에서 동적 메모리 할당을 하는 경우면 눈치껏 소멸자만들어서 메모리 반납하자.
📒 초기화리스트
class Car{
int speed;
int gear;
const int MAX_SPEED;
String& name;
public:
Car(int a, int b, string c): speed(a), gear(b), MAX_SPEED(300), name(c){ //요런식으루
speed = a;
gear = b;
}
Car(int a){
Car(a,0);
}
✔ 초기화리스트를 사용해야만 하는 경우!!!
1. 멤버가 상수인 경우
ex) Const int MAX_SPEED; 가 선언되어 있는 경우
여기에 값을 주면 컴파일 오류가 발생 -> 객체가 생성되지 않았기 때문에
2. 멤버가 레퍼런스인 경우
레퍼런스는 선언 시에 참조하는 변수가 결정되어야하기 때문
3. 멤버가 객체인 경우
A클래스에 B클래스의 객체가 멤버 변수로 들어가 있을 경우,
A클래스에서 B클래스의 생성자를 호출할 수 없다(생성자는 객체가 생성될 때 호출되기 때문에)
디폴트 생성자를 호출하는 경우가 아니라면, 초기화리스트를 사용해야한다.
Author And Source
이 문제에 관하여(클래스의 기초, 생성자와 소멸자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lkm9709/클래스의-기초-생성자와-소멸자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)