생성자 (Constructors)
생성자는 객체가 생성될 때 자동으로 호출되는 특수한 함수입니다. 생성자는 주로 객체의 초기화 작업을 수행합니다.
1. 기본 생성자
기본 생성자는 매개변수가 없는 생성자입니다.
class Person {
public:
string name;
int age;
Person() {
name = "Unknown";
age = 0;
}
};
int main() {
Person person;
cout << "Name: " << person.name << endl;
cout << "Age: " << person.age << endl;
return 0;
}
2. 매개변수가 있는 생성자
매개변수가 있는 생성자는 인수를 받아 객체의 멤버 변수를 초기화합니다.
class Person {
public:
string name;
int age;
Person(string n, int a) {
name = n;
age = a;
}
};
int main() {
Person person("Alice", 30);
cout << "Name: " << person.name << endl;
cout << "Age: " << person.age << endl;
return 0;
}
3. 초기화 리스트
초기화 리스트는 생성자의 초기화 작업을 효율적으로 수행할 수 있도록 합니다.
class Person {
public:
string name;
int age;
Person(string n, int a) : name(n), age(a) {}
};
int main() {
Person person("Bob", 25);
cout << "Name: " << person.name << endl;
cout << "Age: " << person.age << endl;
return 0;
}
소멸자 (Destructors)
소멸자는 객체가 소멸될 때 자동으로 호출되는 특수한 함수입니다. 소멸자는 주로 자원 해제 작업을 수행합니다. 소멸자의 이름은 클래스 이름 앞에 ~
기호를 붙여서 만듭니다.
class Person {
public:
string name;
int age;
Person(string n, int a) : name(n), age(a) {}
~Person() {
cout << "Destructor called for " << name << endl;
}
};
int main() {
Person person1("Alice", 30);
Person person2("Bob", 25);
return 0;
}
예제 문제
문제 1: 기본 생성자와 매개변수가 있는 생성자를 사용하여 책 정보를 저장하는 클래스 작성
책의 제목, 저자, 가격을 저장하는 클래스를 작성하고, 기본 생성자와 매개변수가 있는 생성자를 사용하여 객체를 생성한 후, 책 정보를 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <string>
using namespace std;
class Book {
public:
string title;
string author;
double price;
// 기본 생성자
Book() {
title = "Unknown";
author = "Unknown";
price = 0.0;
}
// 매개변수가 있는 생성자
Book(string t, string a, double p) : title(t), author(a), price(p) {}
void displayInfo() {
cout << "Title: " << title << endl;
cout << "Author: " << author << endl;
cout << "Price: $" << price << endl;
}
};
int main() {
Book book1;
book1.displayInfo();
Book book2("1984", "George Orwell", 9.99);
book2.displayInfo();
return 0;
}
이 프로그램은 기본 생성자와 매개변수가 있는 생성자를 사용하여 책 정보를 저장하고 출력합니다.
문제 2: 초기화 리스트를 사용하여 자동차 정보를 저장하는 클래스 작성
자동차의 브랜드, 모델, 연식을 저장하는 클래스를 작성하고, 초기화 리스트를 사용하여 객체를 생성한 후, 자동차 정보를 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <string>
using namespace std;
class Car {
public:
string brand;
string model;
int year;
// 초기화 리스트를 사용하는 생성자
Car(string b, string m, int y) : brand(b), model(m), year(y) {}
void displayInfo() {
cout << "Brand: " << brand << endl;
cout << "Model: " << model << endl;
cout << "Year: " << year << endl;
}
};
int main() {
Car car1("Toyota", "Corolla", 2020);
car1.displayInfo();
Car car2("Honda", "Civic", 2019);
car2.displayInfo();
return 0;
}
이 프로그램은 초기화 리스트를 사용하여 자동차 정보를 저장하고 출력합니다.
문제 3: 소멸자를 사용하여 객체가 소멸될 때 메시지를 출력하는 클래스 작성
학생의 이름과 나이를 저장하는 클래스를 작성하고, 소멸자를 사용하여 객체가 소멸될 때 메시지를 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
string name;
int age;
Student(string n, int a) : name(n), age(a) {}
~Student() {
cout << "Destructor called for " << name << endl;
}
void displayInfo() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
}
};
int main() {
Student student1("Alice", 20);
Student student2("Bob", 22);
student1.displayInfo();
student2.displayInfo();
return 0;
}
이 프로그램은 소멸자를 사용하여 객체가 소멸될 때 메시지를 출력합니다.
다음 단계
13일차의 목표는 C++의 생성자와 소멸자에 대해 학습하는 것이었습니다. 다음 날부터는 연산자 오버로딩에 대해 다룰 것입니다.
내일은 "연산자 오버로딩"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!
'-----ETC----- > C++ 마스터 시리즈' 카테고리의 다른 글
[C++ 마스터] Day 17: 템플릿 기초 (0) | 2024.08.01 |
---|---|
[C++ 마스터] Day 15: 상속과 다형성 (0) | 2024.08.01 |
[C++ 마스터] Day 14: 연산자 오버로딩 (0) | 2024.08.01 |
[C++ 마스터] Day 11: 구조체와 열거형 (0) | 2024.08.01 |
[C++ 마스터] Day 12: 클래스와 객체 지향 프로그래밍 (OOP) 기초 (0) | 2024.08.01 |