main()
{
int arr[100];
input(arr);
for each(int a in arr)
printf("a = %d\n", a);
}
하지만 이때 for each의 변수를 reference로 선언된다면 내부적으로 const로 정의되므로 내부변수를 수정하는 것에는 사용 불가입니다.
class Student
{
private :
char Name[32];
int Kor;
int Mat;
int Eng;
public :
Student();
~Student();
void LoadFromFile();
};
위와 같은 변수에 대해서
main()
{
Student arr[100];
for each(Student a in arr)
a.LoadFromFile();
}
와 같이 한다면, a에는 arr 각 원소의 복사본이 들어가므로 정작 arr 원소들에 로드되지는 않습니다. 로드된 데이터는 arr의 원소가 아니라 arr의 원소의 복사본에 들어갔다가, 메모리 해제되며 사라지죠.그렇다고 해서
main()
{
Student arr[100];
for each(Student &a in arr)
a.LoadFromFile();
}
이렇게 하면 a는 반드시 const reference여야 하므로 컴파일 에러가 납니다.
이 경우에는 배열이 아닌 포인터의 배열을 사용해서 다음과 같이 코딩해야 합니다.
main()
{
Student *arr[100];
for(int k = 0; k < 100; ++k)
arr[k] = new Student;
for each(Student *a in arr)
a->LoadFromFile();
}
댓글 없음:
댓글 쓰기