본문 바로가기

전체 글51

Why doesn't C++ have a final keyword? 왜 C++은 final 키워드가 없나요? 있습니다. 그런데 생각한 것 만큼 유용하지는 않습니다. 2019. 2. 27.
What is a pure virtual function? 순수 가상 함수가 무엇인가요?순수 가상 함수는 무조건 파생 클래스에서 오버라이드가 되어야 하는 함수이고 정의를 할 필요가 없습니다. 가상 함수는 특이한 "=0" 문법을 사용하여 순수 가상 함수로 선언됩니다. 예를 들면: class Base {public:void f1();// 가상 함수가 아닙virtual void f2();// 가상 함수이나 순수 가상 함수는 아님virtual void f3() = 0;// 순수 가상 함수}; Base b;// 에러: 순수 가상 함수 f3이 오버라이드 되지 않았습니다. 이쪽을 보면, Base는 추상 클래스이고 (순수 가상 함수가 있기 때문에), 그렇기 때문에 어떠한 Base 클래스의 오브젝트도 직접적으로 생성될 수 없습니다. Base는 (명시적으로) 기본 클래스의 역할을.. 2019. 2. 27.
Why are destructors not virtual by default? 왜 파괴자는 기본적으로 virtual이 아닌가요? 왜냐하면 많은 클래스가 기본 클래스(부모 클래스)로 사용하려고 디자인하지 않기 때문입니다. 가상함수들은 파생 클래스의 객체의 인터페이스 역할을하는 클래스에서만 의미가 있습니다 (전형적으로 힙에 할당되어있고, 포인터나 참조형으로 접근될 때). 그러면 언제 파괴자를 virtual로 선언해야 합니까? 클래스에 적어도 1개의 가상함수가 있을때 선언합니다. 가상함수가 있으면 클래스가 파생 클래스의 인터페이스의 역할을 하는것을 나타내며, 파생 클래스의 오브젝트가 base의 포인터를 통해 파괴될 수 있습니다. 예를 들자면 : class Base {// ...virtual ~Base();}; class Derived : public Base {// ...~Derived.. 2019. 2. 26.
Why don't we have virtual constructors? 왜 가상 생성자는 없는건가요? 가상 호출은 부분적인 정보가 주어지면 작업을 완료하는 메커니즘입니다. 특히 "virtual"은 정확한 타입이 아닌 인터페이스만 알고 있는 상태에서 함수를 호출하게 해줍니다. object를 만들기 위해서는 완성된 정보가 필요합니다. 특히, 생성을 원하는 정확한 타입을 알아야 합니다. 따라서, "call to a constructor"는 virtual이 될 수 없습니다. 객체 생성을 요청할 때 간접 참조를 사용하는 기술은 종종 "Virtual Constructors"로 언급되었습니다. 예를 들면, TC++PL3 15.6.2.을 참고하세요 해당 예제는 추상 클래스를 사용해서 적당한 타입의 오브젝트를 생성하는 기술입니다. struct F {// interface to object .. 2019. 2. 26.