본문 바로가기

전체 글51

Do we really need multiple inheritance? 꼭 그렇지는 않습니다. 다른 방법으로 단일 상속 없이 할 수 있고, 다른 방법으로 다중 상속 없이 할 수 있습니다. 또한, 다른 방법을 통해 클래스 없이 할 수 있습니다. C가 이 논쟁의 증거입니다. 하지만, 정적 타입 검사와 상속을 지원하는 모든 모던 언어들은 다중 상속의 서식(형식)을 제공합니다. c++에서는, 추상 클래스들이 종종 인터페이스로 제공되고, 클래스는 다수의 인터페이스를 가질 수 있습니다. 흔히 "Not MI (다중 상속이 없는)"라고 간주되는 다른 언어들도 간단하게 인터페이스 같이 순수 가상 클래스와 동일한 다른 이름을 가지고 있습니다. 2019. 4. 3.
Why doesn't C++ have a universal class Object? 왜 C++에는 Object 공통 클래스가 없나요? 거의 모든 상황에서 제네릭 프로그래밍이 정적인 타입 안전의 대안이 되기 때문에 필요가 없습니다. 다른 상황에서는 다중 상속으로 처리가 됩니다. 공통 클래스는 자신의 의미를 전달하지 않기 때문에 유용하지 않습니다. "공통" 클래스는 타입과 인터페이스에 대한 엉성한 생각을 부추기고 과도한 런타임 체크로 연결됩니다. 공통 클래스를 사용하면 비용이 발생합니다: 객체는 다형성을 가지기 위해서 힙에 할당되어야만 합니다. 이는 메모리와 접근 비용을 의미합니다. 힙에 할당된 객체들은 복사 시멘틱을 자연적으로 지원하지 않습니다. 힙 객체는 단순한 스코프에 따른 동작 (자원 관리를 복잡하게 하는)을 지원하지 않습니다. 공통 기본 클래스는 dynamic_cast와 다른 런타.. 2019. 3. 7.
Can I stop people deriving from my class? 다른 사람이 제 클래스를 파생하는것을 막을 수 있나요? 할 수 있는데 왜 할려고 하나요? 일반적인 답변 두 가지가 있습니다 : 효율을 위해 : 자신의 함수 호출이 virtual 인 것을 피하기 위해안전을 위해 :자신의 클래스가 기본 클래스로 쓰이지 않는다는 것을 보증하기 위해 (예를 들자면, 슬라이싱에 대한 걱정 없이 객체를 복사하는 것을 틀림없이 하기 위해) 제 경험상, 효율의 문제라면 보통 쓸때없는 걱정입니다. C++에서는, 가상 함수 호출은 아주 빠르기 때문에 가상 함수로 설계된 클래스를 실제 사용했을 때, 일반적인 함수 호출을 사용하는 대안책과 비교하여 측정할 수 있는 런타임 오버헤드를 만들지 않습니다. 여기서 중요한 것은 가상 함수 호출 메커니즘은 전형적으로 포인터나 참조에 의한 호출에서만 사용.. 2019. 2. 27.
Can I call a virtual function from a constructor? 생성자에서 가상 함수를 호출할 수 있나요? 할 수는 있지만 조심해야 합니다. 예상한 대로 동작하지 않을 수 있습니다. 생성자에서는, 파생 클래스의 오버라이딩이 아직 일어나지 않았기 때문에 가상 함수 메커니즘이 비활성화됩니다. 오브젝트는 기본 클래스부터 위로 "파생 클래스 전 기본 클래스" 로 생성됩니다. #include#includeusing namespace std; class B {public:B(const string& ss) { cout 2019. 2. 27.