본문 바로가기

분류 전체보기40

1일차 - TypeTraits 아래와 같은 코드를 생각해보자. template inline T Max(T a, T b) { return a < b ? b : a; } int main(int argc, char* argv[]) { int x = 10, y = 20; Max(x, y); Max(&x, &y); } Max 함수는 함수 템플릿이므로 위의 호출들은 아무 문제없이 수행될 것이다. 하지만 두번째 호출은 인자로 정수값의 주소를 넘기므로 T는 int* 로 추론될 것이며, 이 함수는 두 주소값을 비교한다. 이는 의미없는 행위이며, 실제로 사용자가 원하는 것은 아래와 같이 인자가 포인터일 경우에는 역참조한 값에 대한 비교일 것이다. template inline T Max(T a, T b) { if (T is pointer-type) re.. 2021. 6. 14.
1일차 - Template 부분 전문화 하나의 클래스 템플릿에서 타입에 따라 다른 형태의 클래스들이 생성 #include using namespace std; // primary template template class Stack { public: void Push() { cout 2021. 6. 14.
1일차 - 추상 클래스(Abstract class) Review - abstract class 순수 가상함수(pure virtual function)를 하나 이상을 가지는 클래스로서 객체를 생성할 수 없음 파생 클래스에서 특정 함수를 반드시 구현하도록 지시함 #include using namespace std; // 추상 클래스 class Shape { public: virtual void Draw () = 0; // 순수 가상함수 }; // 순수 가상함수를 모두 구현한 파생 클래스, 객체 생성 가능 class Circle : public Shape { public: void Draw () override { cout 2021. 6. 11.
1일차 - 상속(inheritance) Review - protected constructor 자신(추상적인 개념)은 객체를 생성할 수 없지만 파생 클래스(구체적인 개념)는 객체를 생성할 수 있게 하는 클래스 디자인 기법 최상위 추상(abstract) 클래스의 생성자는 protected로 만드는 것이 좋음.class Animal { public: virtual ~Animal () {} protected: Animal () {} }; class Dog : public Animal { public: Dog () {} }; int main (int argc, char* argv[]) { // Animal a; Dog d; return 0; } 위의 코드에서 주석을 친 부분을 활성화시키면 컴파일 에러가 발생한다. 이는 객체 생성 시에 외부로 노출되는.. 2016. 5. 24.