Sturcture : Initialization - 구조체 초기화에 관하여.
The members of a struture variable may be initialized with starting values when the structure variable is defined.
모든 메모리가 null값으로 지정되지 않은 이상 메모리는 trash 값을 가지고 있다. 그렇기 때문에 아직 선언만 해 놓고 사용하지 않은 변수의 initialization은 매우 중요하다 - 원하지 않았던 값이 사용되어버릴수도 있으니까.
structure의 초기화에는 두가지 방법이 있다.
1. Initialization List
nested structure가 아닌 경우에 이용하기 편한 방법으로, 변수를 선언하면서 값을 순서대로 집어넣어버리는 방법이다.
ex.
string name;
char letter_grade;
int student_ID;
};
라는 structure에서 초기값을 name = noname, letter_grade=B, student_ID=20100000 으로 두고 싶다면
메인 함수 내에서 변수를 선언할 때
이라고 하는 것.
매우 간단하다. 여기서 신경써야 할 것은 initialization list에 들어가는 변수가 메인 함수 내에서 변수 취급하는 것과 같이 이루어져야 한다는 것이다. 무슨 말이냐면, string 값인 noname과 char값인 B를 보면 알 수 있듯이 char 값을 넣을 때에는 'char', string 값을 넣을 때에는 "string" 으로 사용해야 한다는 것.
list를 사용하여 initialization시킬 때에는 원하는 값만 initialization시킬 수도 있는데,
Time initial = {"noname", 'A'};
정도의 방식이다. 주의할 점은 이것이 순서대로 지정되기 때문에 생략할 값이 뒤에 와야 한다는 점이다.
와 같이 가운데의 값을 생략하는 것은 불가능하다.
마지막으로 주의할 점을 하나 더 추가하자면
Structure를 선언할 때 initialization의 방식이 아래와 같이 이루어져서는 안 된다는 것.
string name = "noname";
char letter_grade = 'B';
int student_ID = 20100000;
}; // Illegal!!!!
2. Constructors
Initialization list의 방식이 매우 편리하기는 하지만 1. 몇 개 변수만 특정적으로 initialization시킬 수 없다 는 점과 2. string값과 같은 것이 list 내부에 있으면 몇몇 작업환경에서는 컴파일 오류가 생길 수도 있다는 점 때문에 Constructor를 사용하는 편이 더 편리하다.
ex.
struct Student{
string name;
int stu_ID;
int grade; // 여기까지는 원래의 structure선언과 같다.
Student(){
name = " ";
stu_ID = 11111111;
grade = 5;
} // Constructor
};
보통의 함수와 다르게 Constructor는 structure가 생성될 때마다 자동적으로 실행되어 그 값을 intialization 시킨다. 초기화시키고 싶지 않은 값이 있으면 constructor에 안 넣으면 그만이다.
또, Constructor를 사용자가 원하는 값을 읽어서 작동하도록 만들 수도 있는데, 함수 만드는 방식하고 같다.
struct Student{
string name;
int stu_ID;
int grade; // 여기까지는 원래의 structure선언과 같다.
Student(string n, int id, int score){
name = n;
stu_ID = id;
grade = score;
} // 이런 방법으로 다른 값을 받아들이는 Constructor를 만들면
};
int main(){
Student noValue;
Student value("noname", 20100000, 5);
//...
} // 두 가지의 방식으로 Student의 인스턴스를 생성할 수 있다.
위의 예에서 noValue는 아무런 값을 받아들이지 않는 Student() 의 값을 가지고 오게 된다. -> { " ", 11111111, 5}
반면 아래의 예에서 두 개의 값을 넣어준 value는 Student(n, id)의 값을 가지고 오게 된다 -> {"noname", 20100000, 5}
reference : Pearson Intertional 6th edi, Starting out with C++ Early objects
- 무지하게 간단한 내용인데 왜 설명하려면 이렇게 지리해지는거지. ... 다시 읽기 싫으니까 잊어먹지 말아야겠다 i_i
'FAVORITE > C++' 카테고리의 다른 글
Structure : nested structure (0) | 2013.04.18 |
---|---|
Structure : 제일기본 (0) | 2013.04.16 |