C++ 소멸자,접근 지정자, 인라인 함수,구조체
□소멸자
-객체가 소멸되는 시점에서 자동으로 호출되는 함수
※특징
객체가 사라질 때 마무리 작업을 위함.
소멸자 함수의 이름은 클래스 이름 앞에 ~를 붙인다.
리턴형X
중복 불가능함.
선언하지 않으면 자동으로 기본 소멸자 생성
class Circle{
...
Circle();
Circle(itn r);
...
~Circle(); //소멸자 선언
};
Circle::~Circle(){ //소멸자 함수 구현
....
}
□생성자/소멸자 실행 순서
지역 객체 - 함수 내에 선언되고, 함수가 종료되면 소멸
전역 객체 - 함수 바깥에 선언되고, 프로그램이 종료되면 소멸
객체 생성 순서
지역 객체 - 함수가 호출되는 순간에 순서대로 생성
전역 객체 - 프로그램에 선언된 순서대로 생성
객체 소멸 순서
지역 객체 - 함수가 종료하면, 지역 객체가 생성된 순서의 역순으로 소멸
전역 객체 - 프로그램이 종료하면, 전역 객체가 생성된 순서의 역순으로 소멸
#include<iostream>
using namespace std;
class Circle{
public:
int radius;
Circle();
Circle(int r);
~Circle();
};
Circle::Circle(){
radius = 1;
cout << "반지름 " << radius <<" 원 생성" <<endl;
}
Circle::Circle(int r){
radius = r;
cout << "반지름 " << radius <<" 원 생성" <<endl;
}
Circle globalDN(1000);
Circle globalPZ(2000);
int main(){
Circle mainDN;
Circle mainPZ(20);
}
반지름 1000 원 생성
반지름 2000 원 생성
반지름 1 원 생성
반지름 20 원 생성
반지름 20 원 소멸 //소멸자 순서 주의
반지름 1 원 소멸
반지름 2000 원 소멸
반지름 1000 원 소멸
□접근 지정자
private
동일한 클래스의 멤버 함수에만 제한함. 디폴트 접근 지정자
public
모든 다른 클래스에 허용.
protected
클래스 자신과 상속받은 자식 클래스에만 허용
□오버헤드
프로그램이 함수를 호출하면
바로 함수의 코드를 따라가는게 아니라
위 그림의 과정을 거친 후 코드를 따라가게 된다.
따라서 크기가 작은 함수를 호출하면
위 과정이 코드를 따라가는 과정보다 길어져
오버헤드가 발생한다.
□인라인 함수
-inline키워드로 선언된 함수
인라인 함수를 호출하는 곳에 인라인 함수 코드를 확장 삽입.
인라인 키워드가 붙은 함수를 호출하면
함수의 코드를 삽입해 실행.
□자동 인라인 함수
클래스 선언부에 선언된 함수에 직접 구현을 해주면
inline 키워드를 쓰지않아도 자동으로 인라인으로 구분된다.
class Circle{
private:
int radius;
public:
Circle(){ //자동 인라인 함수
radius = 1;
}
Circle(int r);
double getArea(){ //자동 인라인 함수
return 3.14*radius*radius;
}
};
□구조체
상속,멤버,접근 지정 등 모든 것이 클래스와 동일
단, 디폴드 접근 지정이 다름
구조체 - public
클래스 - private
단지 C와 호환을 할 때만 사용
객체 생성 시
struct structName stObj; //C의 구조체 객체 생성
structName stObj; //C++의 구조체 객체 생성
구조체 선언
#include <iostream>
using namespace std;
struct StructCircle{ //구조체 선언
private:
int radius;
public:
StructCircle(int r){radius = r;} //구조체의 생성자
};
int main(){
StructCircle waffle(3); //객체 생성
}