출처 : http://ra2kstar.tistory.com/146
클래스 (class)
OOP의 가장 핵심적인 개념인 클래스는 "구조체가 확장 된 것"이라 생각하면 된다.
C에서 구조체는 타입이 다른 변수의 집합이라 보았다면, C++에서 클래스는 타입이 다른 변수의 집합뿐만 아니라, 함수까지 포함 된 것이다.
선언 방법은 C의 구조체 선언문에서 struct 를 class로 바꾸면 되며, public 이나 private 와 같은 엑세스 지정자도 추가 할 수 있다.
// People 클래스 선언
class People{
// 엑세스 지정자
private:
int age;
char* name;
double height;
public:
// 함수도 포함이 가능하다
void set_People(int _age , char* _name , double _height);
void show_People();
}; //세미콜론은 까먹지 말고
생성자 (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();
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;
}
'Stupid Computer > 2. C 언어' 카테고리의 다른 글
[json/cjson] json_object_is_type 사용법 (0) | 2014.03.06 |
---|---|
[C/C++/리눅스/자바] Json 사용법 및 사용예제 (0) | 2014.02.28 |
[C/C++] 기본! 컴파일과 빌드~ 차이점 (0) | 2014.02.28 |
[링크에러 LNK2019] C++에서 C 함수 사용하기 (0) | 2014.02.26 |
main(int argc, char* argv) 컴파일 옵션 사용 하는 예제 (0) | 2014.02.24 |
윈7에서 비쥬얼 스튜디오 환경변수 설정!!(변수추가) (0) | 2013.06.30 |
[C++] 소셜네트워크서비스 ! SNS 코딩하기, 코딩 프로젝트 예제 ! (3) | 2013.05.29 |
strtok 함수 사용 ! (문자열 토큰단위로 짜르고 배열에 저장) (0) | 2013.05.17 |
소스파일,헤더파일 나누기! (0) | 2013.05.13 |
비쥬얼 초기 환경설정 다시 하기! (0) | 2013.05.02 |