without haste but without rest

[C++] 생성자 본문

ProgrammingLanguage/C++

[C++] 생성자

JinungKim 2020. 3. 2. 17:58

0. 생성자

 

C++ 에서는 생성자(Constructor)를 이용해서 객체를 생성과 동시에 멤머 변수를 초기화할 수 있다. (자바에서 쓰던 그 생성자가 맞다.)

 


1. 생성자 예제 코드

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
    string name;
    int age;
    int absent;
public:
    Student(string name, int age) {
        this->name = name;
        this->age = 20;
        this->absent = 0;		// 결석횟수는 인스턴스 생성시 0부터 시작
    }
    void show() {
        cout << name << ", " << absent;
    }
};

int main(void) {
    Student s = Student("Jack", 20);
    s.show();
}

 

 

축약형

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
    string name;
    int age;
    int absent;
public:
    Student(string name, int age) : name(name), age(age), absent(0) {}
    void show() {
        cout << name << ", " << absent;
    }
};

int main(void) {
    Student s = Student("Jack", 20);
    s.show();
}

 


2. 복사 생성자

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
    string name;
    int age;
    int absent;
public:
    Student(string name, int age) : name(name), age(age), absent(0) {}
    Student(const Student& other) {		// 복사 생성자 선언
        name = other.name;
        age = other.age;
        absent = other.absent;
    }
    void absentUp() { absent++; }
    void show() {
        cout << name << ", " << absent << endl;
    }
};

int main(void) {
    Student s = Student("Jack", 20);
    s.absentUp();
    Student s2(s);
    s2.absentUp();
    s.show();
    s2.show();
}

* 복사 생성자는 다른 인스턴스의 참조를 인수로 받는다. 이 참조를 이용해서 자신의 인스턴스를 초기화한다. 

* 즉 매개변수로 받는 인스턴스의 속성은 그대로 가져와 사용하되, 매개변수로 받은 인스턴스와는 다른 메모리에 할당되어 독립적이다.


 

'ProgrammingLanguage > C++' 카테고리의 다른 글

[C++] 소멸자  (0) 2020.03.02
[C++] 클래스  (0) 2020.03.02
[C++] 튜토리얼  (0) 2020.03.02
Comments