본문 바로가기
-----ETC-----/C++ 마스터 시리즈

[C++ 마스터] Day 13: 생성자와 소멸자

by cogito21_cpp 2024. 8. 1.
반응형

생성자 (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++의 생성자와 소멸자에 대해 학습하는 것이었습니다. 다음 날부터는 연산자 오버로딩에 대해 다룰 것입니다.

 

내일은 "연산자 오버로딩"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!

반응형