C++에서 클래스(class)란 구조체의 상위 호환이다. C++의 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 확장된 의미를 가진다.
이러한 클래스를 가지고 객체 지향 프로그램을 작성할 수 있다.
class Sample {
public:
Sample(void);
~Sample(void);
};
C++에서는 객체의 생성과 동시에 멤버 변수를 초기화해주는 생성자(constructor)라는 멤버 함수를 제공한다.
인스턴스 생성
초기화를 위한 데이터를 인수로 전달받을 수 있음
생성자는 반환값이 없지만, void형으로 선언하지 않음
객체 초기화 방법이 여러 개 존재할 경우,
오버로딩 규칙에 따라 여러 개의 생성자를 가질 수 있음
C++에서 생성자는 객체 멤버의 초기화뿐만 아니라, 객체를 사용하기 위한 외부 환경까지도 초기화하는 역할을 한다.
-> 외부 환경이 어떤 걸 이야기하는지 잘 모르겠음.
따라서 객체의 수명이 끝나면 생성자의 반대 역할을 수행할 멤버 함수도 필요하다. 이를 소멸자(destructor)라고 한다.
소멸자는 객체의 수명이 끝나면 컴파일러에 의해 자동으로 호출되며, 사용이 끝난 객체를 정리한다.
인스턴스 파괴
매개변수는 없음
소멸자는 반환값이 없지만 void형으로 선언하지 않음
생성자와 다르게, 소멸자는 단 하나만 가질 수 있음
소멸자는 const, volatile 또는 static으로 선언될 수는 없지만,
const, volatile 또는 static으로 선언된 객체의 소멸을 위해서 호출될 수는 있습니다. (이건 잘 모르겠음)
c++ 의 생성자와 소멸자는 반환값 타입이 없다. 없더라도 사용할 때는 return ;
입력한다. 생성자와 소멸자 안에서 할 일을 다 했다는 의미로 사용한다.
C++에서 클래스는 구조체와 마찬가지로 사용자가 정의할 수 있는 일종의 타입이며, 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야 한다.
( 위에서 봤던 Sample 클래스 선언 )
선언된 클래스 타입의 객체를 인스턴스(instance)라고 하며, 메모리에 대입된 객체를 의미한다.
하나의 클래스에서 여러 개의 인스턴스를 생성할 수 있음
독립된 메모리 공간에 저장된 자신만의 멤버 변수를 가짐.
멤버 함수는 모든 인스턴스가 공유
Sample 클래스의 인스턴스로 instance 를 만들었다.
int main() {
Sample instance;
return 0;
}
#include "Sample.class.hpp"
int main() {
Sample instance;
return (0);
}
#include <iostream>
#include "Sample.class.hpp"
Sample::Sample(void) {
std::cout << "Constructor called" << std::endl;
return ;
}
Sample::~Sample(void) {
std::cout << "Destructor called" << std::endl;
return ;
}
#ifndef SAMPLE_CLASS_H
# define SAMPLE_CLASS_H
class Sample {
public:
Sample(void);
~Sample(void);
};
#endif