[ 생성자 (Constructor) ] : 클래스로부터 객체 생성시에 반드시 한 번 호출되는 함수
클래스명과 같은 함수, 리턴하지 않음(void도 X, 리턴형 없음)
생성자의 목적 : 객체가 생성될 때 객체가 필요한 초기화를 위해
ㄴ 멤버 변수 값 초기화, 메모리 할당, 파일 열기, 네트워크 연결 등
객체생성과정 : 1) 메모리공간 할당 2) 생성자 호출 및 실행
생성자가 하나도 없는 경우 : 컴파일러가 생성자 삽입해서 호출 ==> Default 생성자
매개변수가 없고, 바디도 비어있는 생성자
Circle donut; //매개 변수가 없는 생성자 호출
Circle pizza(30); //30을 매개 변수로 받을 수 있는 생성자 호출
= 오버로딩 가능함
생성자 예시 코드
#include <iostream>
using namespace std;
class Circle
{
public:
int radius;
double getArea();
//생성자 : 리턴값이 없어야 함
Circle(); //기본 생성자
Circle(int r); //생성자도 오버로딩이 가능함
};
int main(void)
{
Circle donut; //생성자가 하나도 없는 경우 : 컴파일러가 생성자 삽입해서 호출
cout << "도넛의 반지름을 입력하세요 " << endl;
cin >> donut.radius;
double area = donut.getArea();
cout << "도넛의 면적은 " << area << "입니다." << endl << endl;
Circle pizza(30);
area = pizza.getArea();
cout << "피자의 면적은 " << area << " 입니다." << endl;
return 0;
}
double Circle::getArea()
{
return radius * radius * 3.14;
}
Circle::Circle() {}
Circle::Circle(int r) {
radius = r;
}
[ 소멸자 ] : 객체가 소멸되는 시점에서 자동으로 호출되는 함수
ㄴ 임의로 호출 불가
ㄴ 소멸자 함수 선언 : ~클래스명();
ㄴ 소멸자 함수 구현 : 클래스명::~클래스명() {}
소멸자의 목적
ㄴ 객체가 사라질 때 마무리 작업을 ㅜ이함
ㄴ 실행 도중 동적으로 할당 받은 메모리 해제, 파일 저장 및 닫기, 네트워크 닫기 등
ㄴ 소멸자는 리턴 타입이 없고, 어떤값도 리턴하면 안됨
ㄴ 중복 불가능(한 클래스 내에 한개만 작성 가능
생성자/ 소멸자 실행 순서
- 객체가 선언된 위치에 따른 분류
지역 객체 : 함수 내에 선언된 객체, 함수 종료시 소멸
전역 객체 : 함수 바깥에 선언된 객체, 프로그램 종료시 소멸
$$$$$
class Circle
{
private:
int radius;
public:
Circle() {radius = 1;}
Circle(int r) {radius = r;}
~Circle() {}
double getArea() {return 3.14*radius*radius;}
};
----------------------------
Circle donut;
//donut.radius = 10; //이런식의 값 변경을 못하도록 막아야함 (정보은닉 위배)
Circle pizza(30);
//pizza.radius = 40; //이런식의 값 변경을 못하도록 막아야함 (정보은닉 위배)
donut.getArea();
pizza.getArea();
-> 함수를 통해서만 값을 바꿀 수 있도록 해야함(변수는 외부에서 변경하지 못하도록 함)
-> 멤버 변수는 private:, 멤버 함수는 public:을 선언
$$$$$
[ 접근 지정자 ]
캡슐화의 목적 : 객체 보호, 보안(정보은닉)
멤버에 대한 3가지 접근 지정자
- private : 동일한 클래스의 멤버 함수에만 제한함 //변수
- public : 모든 다른 클래스에 허용 //함수
- protected : 클래스 자신과 상속받은 자식 클래스에만 허용