
- C++ 생성자와 소멸자, 연산자 오버로딩
- 생성자
- 정의 : 생성자는 클래스의 특별한 멤버 함수로, 객체를 초기화하는 역할을 합니다.
- 문법 :
class ClassName { public: ClassName(parameters); };
- 예제:
class Book {
public: Book(const string& title, int total_page);
private: string title_;
int total_page_;
int current_page_;
double percent_;
void set_percent();
};
Book::Book(const string& title, int total_page) {
title_ = title;
total_page_ = total_page;
current_page_ = 0; set_percent();
}
void Book::set_percent() {
percent_ = (double)current_page_ / total_page_ * 100;
}
int main() {
Book web_book("HTML과 CSS", 350);
cout << web_book.percent_;
return 0;
}
- 생성자의 종류:
- 기본 생성자: 매개변수가 없음.
- 매개변수 생성자: 매개변수를 받음.
- 복사 생성자: 다른 객체를 사용하여 초기화함.
추가 내용 :
- 생성자는 클래스의 이름과 동일하며 반환형이 없습니다.
- 생성자는 객체가 생성될 때 자동으로 호출됩니다.
- 소멸자
- 정의: 소멸자는 객체가 소멸될 때 호출되는 클래스의 멤버 함수입니다.
- 문법:
class ClassName {
public: ~ClassName();
};
- 예제:
class Book {
public: ~Book();
};
Book::~Book() {
// 정리 작업 코드
}
int main() {
{
Book web_book("HTML과 CSS", 350); // Book 객체 생성
}
// Book 객체가 여기서 소멸되고, 소멸자가 호출됨
return 0;
}
주요 포인트:
- 소멸자는 매개변수가 없습니다.
- 클래스당 하나의 소멸자만 가질 수 있습니다.
- 메모리, 파일 핸들 등의 자원을 해제하는 데 사용됩니다.
추가 내용:
- 소멸자는 클래스 이름 앞에 물결표(~)를 붙여서 선언합니다.
- 소멸자는 객체가 범위를 벗어날 때 자동으로 호출됩니다.
- 연산자 오버로딩
정의: 연산자 오버로딩은 사용자 정의 타입(클래스)과 함께 연산자가 작동하는 방식을 재정의할 수 있게 합니다.
예제:
class Complex {
private: float real;
float imag;
public: Complex() : real(0), imag(0) {}
Complex(float r, float i) : real(r), imag(i) {}
Complex operator + (const Complex& obj) {
Complex temp;
temp.real = real + obj.real;
temp.imag = imag + obj.imag;
return temp;
}
void display() {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Complex c1(3.0, 4.0), c2(1.0, 2.0), result;
result = c1 + c2;
result.display();
return 0;
}
- 오버로딩 가능한 연산자 종류:
- 산술 연산자 (+, -, *, /)
- 관계 연산자 (==, !=, <, >)
- 증가 및 감소 연산자 (++, --)
- 스트림 삽입 (<<) 및 추출 (>>)
추가 내용:
- 연산자 오버로딩은 객체 간의 연산을 보다 직관적으로 만들 수 있습니다.
- 클래스 내에서 연산자를 정의할 때는 operator 키워드를 사용합니다.
추가 예제:
class Point {
private: int x, y;
public: Point(int x=0, int y=0) : x(x), y(y) {}
Point operator - (const Point& p) {
return Point(x - p.x, y - p.y);
}
void display() {
cout << "(" << x << ", " << y << ")" << endl;
}
};
int main() {
Point p1(10, 5), p2(3, 4), p3;
p3 = p1 - p2; p3.display();
return 0;
}
이 예제에서는 - 연산자를 오버로딩하여 두 Point 객체를 빼는 기능을 구현했습니다.
'Program Language > C++ 언어' 카테고리의 다른 글
14. C++ STL 반복자 (0) | 2024.07.09 |
---|---|
13. C++ OOP 개념 이해하기 : 캡슐화, 상속성, 다형성 (1) | 2024.06.17 |
11. C++ 함수의 범위와 클래스 (0) | 2024.06.07 |
10. C++ 함수의 기본 (0) | 2024.05.31 |
09. C++ 구조체의 기본과 활용 (0) | 2024.05.31 |