728x90

생성자(Constructor) 

클래스를 선언하게 되면 그 클래스는 메모리에 객체로써 자리를 잡게 된다.

그러나, 이 객체는 해당 메모리에 자리만 잡고 있을 뿐이지, 초기화는 되지 않으므로,

생성자를를 통해서 초기화를 해줄 필요가 있다.

기본적으로 객체를 선언하였다면, 객체를 이루는 변수들에 값을 대입함으로써 객체를 초기화 할 수 있지만,

객체가 생성될때 마다 값을 대입하는 행동은 귀찮고 비효율적이다.

 

이런 비효율 적인 활동을 간단하게 해결 할 수 있게 하는 것이 바로 생성자이다.

생성자는 스스로 자기 자신의 객체를 초기화 하는 방법을 정의하는 것으로써,

생성자의 이름은 항상 클래스명과 동일해야 한다.

또한 오버로딩을 통해서 인자값을 받을 수 있음

리턴값을 가질 수 없다는 것이 특징이다.

 

생성자 호출 방법

생성자명 객체명(인자값);

생성자명 객체명 = 생성자명(인자값);

 

ex)

People peo(나이, "이름",키) ;

people peo = People(나이, "이름", 키);

 

class People{

private:

int age;

char * name;

double height;

public:

void set_People(int _age, char* _name, double _height);

void show_People();

//기본 생성자

People(){

char *t = "naddru";

cout<<"=== 생성자 호출 : 인자값 없음 ==="<<endl;

age=30;

name="naddru";

height=182; 

}

//생성자 오버로딩(인자값을 지정해 줄 수 있다)

People(int _age, char* _name, double _height){

cout<<"=== 생성자 호출 : 인자값 3개 ==="<<endl;

age= _age;

name= _name;

height= _height;

}

};

 

생성자 오버로딩

오버로딩과 오버라이딩 개념은 항상 헷갈리지만, 이 두 개념에 정리는 다음으로 미룬다.

일단 생성자에선 생성자 오버로딩이 가능하며, 이것을 통해서 인자값을 전달 할 수 잇다.

함수를 재정의하는 것을 오버라이딩(Overriding)이라하며, 이것은 기존의 함수가 행해왔던 활동을 다른 활동으로 변경하는 것을 의미한다.

오버로딩(Overloading)은 기존의 함수에 인자값이 다른 함수를 중복 정 하는 것

 

소스코드

#include <iostream>
using namespace std;

 

class People{

private:
    int age;
    char* name;
    double height;

public:
    void set_People(int _age , char* _name , double _height);
    void show_People();

 

//default 생성자
    People(){

char* t = "naddru";

cout << "=== 생성자 호출 : 인자값 없음 ===" << endl;
age = 30;
name = "naddru";
height = 182;

}

 //생성자 오버로딩
    People(int _age , char* _name , double _height){
            cout << "=== 생성자 호출 : 인자값 3개 ===" << endl;
            age = _age;
            name = _name;
            height = _height;

}

};

 

void People::set_People(int _age, char* _name , double _height){
    age = _age;
    name = _name;
    height = _height;
}

void People::show_People(){
    cout << "나이 : " << age << endl;
    cout << "이름 : " << name << endl;
    cout << "키   : " << height << "  이었으면 좋겠다. ㅎ "<<endl << endl;
}

 

int  main(){

 

// 기본 생성자 사용
People p = People();
p.show_People();

 

// 오버로딩 된 생성자 사용
People p2(31,"lina",168);
p2.show_People();

 

//p 객체의 값을 변경
p.set_People(18,"child",178);
p.show_People();
return 0;

 

 

 

 

'…™업무일지。 > …™C++。' 카테고리의 다른 글

가상 함수와 추상 클래스  (0) 2014.10.20
가상시리얼포트  (0) 2014.10.17
상속(Inheritance)의 이해  (0) 2014.10.15
※const static 멤버  (0) 2014.10.15
※인라인(inline) 함수 -작업중-  (0) 2014.10.15