실습숙제2 재공지
–실습숙제2에서 2_CPerson.zip을 새로 다운로드 받아서 작성하도록 함
-CPersonManager 클래스는 private 멤버로 CList<CPerson, CPerson&> m_aPersonList를 가지는 것이 아니라 CList<CPerson*, CPerson*> m_aPersonList를 가짐
-그래야, CList에 데이터가 CPerson이나 CStudent이나 CFaculty이라해도 그 데이터형에 맞는 Show함수를 부를 수 있음.
-만약, CList<CPerson, CPerson&>으로 하면 CPerson이나 CStudent이나 CFaculty의 데이터형에 상관없이 모두 CPerson의 Show를 부르게 됨.
-차이점 예시
CArray<Point, Point&> arr1;
arr1.Add(Point(10,20));
arr1.Add(Point(30,40));
arr1.Add(Point3D(4,5,6));
arr1.Add(Point3D(7,8,9));
cout << endl << “CArray<Point, Point&> 출력 Loop by index:” << endl;
for(int i = 0; i < arr1.GetSize(); i++) {
arr1[i].Show(); // dynamic binding이 안됨
} 출력결과:
CArray<Point, Point&> 출력 Loop by index:
X= 10 Y= 20
X= 30 Y= 40
X= 4 Y= 5
X= 7 Y= 8
arr1.Add(Point(10,20));
arr1.Add(Point(30,40));
arr1.Add(Point3D(4,5,6));
arr1.Add(Point3D(7,8,9));
cout << endl << “CArray<Point, Point&> 출력 Loop by index:” << endl;
for(int i = 0; i < arr1.GetSize(); i++) {
arr1[i].Show(); // dynamic binding이 안됨
} 출력결과:
CArray<Point, Point&> 출력 Loop by index:
X= 10 Y= 20
X= 30 Y= 40
X= 4 Y= 5
X= 7 Y= 8
CArray<Point*, Point*> arr2;
arr2.Add(new Point(10,20));
arr2.Add(new Point(30,40));
arr2.Add(new Point3D(4,5,6));
arr2.Add(new Point3D(7,8,9)); cout << endl << “CArray<Point*, Point*> 출력 Loop by index:” << endl;
for(int i = 0; i < arr2.GetSize(); i++) {
Point * pt = arr2[i];
pt->Show(); // dynamic binding
}
출력결과:
CArray<Point*, Point*> 출력 Loop by index:
X= 10 Y= 20
X= 30 Y= 40
X=4 Y=5 Z=6
X=7 Y=8 Z=9
arr2.Add(new Point(10,20));
arr2.Add(new Point(30,40));
arr2.Add(new Point3D(4,5,6));
arr2.Add(new Point3D(7,8,9)); cout << endl << “CArray<Point*, Point*> 출력 Loop by index:” << endl;
for(int i = 0; i < arr2.GetSize(); i++) {
Point * pt = arr2[i];
pt->Show(); // dynamic binding
}
출력결과:
CArray<Point*, Point*> 출력 Loop by index:
X= 10 Y= 20
X= 30 Y= 40
X=4 Y=5 Z=6
X=7 Y=8 Z=9