'C++'에 해당되는 글 2건
- 2008/07/13 왜 STL을 사용하는가? (1)
- 2006/05/14 Dynamic Casting
그럼 이런 상황에서 우리 C++ 고수들이 가만히 있기야 했으랴! 당연히 이런 자바의 우수함에 비견될만한 강력한 라이브러리를 등장시켰으니 이것이 바로 STL(Standard Template Library)라고 할 수 있다. 처음 등장은 SGI에서 개발해 등장했으나 그 유용함으로 결국 C++의 표준 라이브러리로 올라온 엄청난 녀석이다.
#include <algorithm>자바만큼 단순하지는 않지만 자바의 70%정도는 간결한 소스로 소팅을 작성할 수 있다. 여기에 더해서 자바에서는 하기 힘든 함수 포인터를 이용한 소팅의 자율성까지 갖춘 대단함이 있다.
#include <vector>
#include <string>bool case_eq(char *c1, char *c2)
{
if (strcmp(c1, c2) < 0)
return 1;
else
return 0;
}
int main()
{
vector<int> V;
V.push_back(4);
V.push_back(7);
V.push_back(2);
V.push_back(3);
V.push_back(1);
V.push_back(6);
sort(V.begin(), V.end());
copy(V.begin(), V.end(), ostream_iterator<int>(cout, "\n"));
vector<char *> V2;
V2.push_back("my name");
V2.push_back("hello");
V2.push_back("ma name");
V2.push_back("hael");
sort(V2.begin(), V2.end(), case_eq);
copy(V2.begin(), V2.end(), ostream_iterator<char *>(cout, "\n"));
}
이 녀석을 배우기에 가장 좋은 방법은 자바에서 String 클래스를 배우듯 std::string 클래스를 바로 익히는 식으로 공부하는 것이 가장 좋은 것 같다. 보통의 C++ 교재가 접근하는 bottom-up 방식의 접근이 아니라 top-down 방식의 접근이 필요하다는 말이다. 실제로 Accelerated C++은 이런식의 접근으로 C++을 접근하고, 배울 수 있다는 것을 보여준 좋은 예라고 할 수 있다.
처음 이 책을 보면서 내용을 정리했던 내용이 ZP 위키에 있었는데... 현재는 위키 서버가 날아가면서 그때의 자료를 날려서 결과적으로 아무것도 가진게 없다. -_-;; 결국 책을 보라는 말이다. ㅎㅎ 주의할 것은 STL 을 직접 사용해서 배열을 알려주는 관계로 template 에 관련된 문법을 처음부터 사용하는데 큰 의미를 두지말고 그냥 그대로 이해하고 받아들이는 자세가 필요할 것 같다. 괜히 이건 어떻게 만들어진거지 하면서 STL을 뜯기 시작하면 정말 이 책 보기힘들다고 생각한다.
참고로 보면서 이 STL이라는 것을 접해볼 생각이라면 아래의 사이트로 가보자.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/STL
Project Settings(Alt + F7)에서 C/C++ 탭에서 Category → C++ Language를 누르고 Enable Run-Time Type Information(RTTI)를 체크하자.
그런 다음 dynamic cast를 사용하면 된다.
----------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
enum TYPE {HORSE, PEGASUSE};
class Horse
{
private :
int itsAge;
public :
virtual void Gallop() {cout << "Galloping..." << endl;}
};
class Pegasus : public Horse
{
public :
virtual void Fly() {cout << "Fly! Fly!" << endl;}
};
const int NumberHorses = 5;
int main()
{
Horse * Ranch[NumberHorses];
Horse * pHorse;
int choice;
for(int i = 0; i < NumberHorses; i++)
{
cout << "(1)Horse (2)Pegasus : ";
cin >> choice;
if(choice == 2)
pHorse = new Pegasus;
else
pHorse = new Horse;
Ranch[i] = pHorse;
}
cout << endl;
for(i = 0; i < NumberHorses; i++)
{
Pegasus * pPeg = dynamic_cast<Pegasus *> (Ranch[i]);
/*
컴파일 하는 동안에 Ranch[i]가 가르키는 객체가 Pegasus라면 pPeg가 Ranch[i]가 될 것이고 그렇지 않으면 pPeg가 NULL이 될 것이다.
*/
if(pPeg)
pPeg->Fly();
else
cout << "Just a horse" << endl;
delete Ranch[i];
}
}

Prev
Rss Feed