본문 바로가기

NC University/Design Pattern with C++3

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.
1일차 - thiscall Intro 예전 Advanced C++ 수업에서 일반 함수 포인터와 (클래스의) 멤버 함수 포인터의 차이점, 그리고 멤버 함수의 호출원리에 대해 배웠었다. 자세한 것은 예전 정리글을 참고하고, 여기서는 이것이 클래스 디자인에 어떻게 영향을 줄 수 있는지를 중점적으로 정리한다. Review - member function pointer 멤버 함수 포인터와 관련된 내용을 간단히 요약하면 다음과 같다. 비정적(non-static) 멤버 함수는 실제로는 this 포인터를 첫번째 인자로 받기때문에 일반적인 함수 포인터로는 멤버 함수의 주소를 담을 수 없다는 것이었다. 반면에 정적(static) 멤버 함수는 this 포인터를 인자로 가지지 않기 때문에 일반 함수 포인터에 주소를 담는 것이 가능하다. class Di.. 2016. 5. 19.