«virtual-functions» 태그된 질문

객체 지향 프로그래밍에서 가상 함수 또는 가상 메서드는 동일한 서명을 가진 함수에 의해 상속 클래스 내에서 동작을 재정의 할 수있는 함수 또는 메서드입니다. 이 개념은 객체 지향 프로그래밍 (OOP)의 다형성 부분에서 매우 중요한 부분입니다.


25
C ++에서 가상 함수가 필요한 이유는 무엇입니까?
C ++을 배우고 있으며 가상 기능을 사용하고 있습니다. 내가 읽은 것 (책과 온라인에서)에서 가상 함수는 파생 클래스에서 재정의 할 수있는 기본 클래스의 함수입니다. 그러나이 책의 앞부분에서 기본 상속에 대해 배울 때을 사용하지 않고 파생 클래스의 기본 함수를 재정의 할 수있었습니다 virtual. 그래서 여기서 무엇을 놓치고 있습니까? 나는 가상 기능에 더 …





13
인라인 가상 함수가 실제로 의미가 없습니까?
가상 기능을 인라인 할 필요가 없다는 코드 검토 의견을 받았을 때이 질문이 있습니다. 인라인 가상 함수는 함수가 객체에서 직접 호출되는 시나리오에서 유용 할 수 있다고 생각했습니다. 그러나 반론은 내 생각에왔다. 왜 가상을 정의하고 객체를 사용하여 메소드를 호출하고 싶을까? 인라인 가상 함수는 거의 확장되지 않으므로 사용하지 않는 것이 가장 좋습니까? 분석에 …


15
가상 함수 및 성능-C ++
수업 디자인에서는 추상 클래스와 가상 함수를 광범위하게 사용합니다. 가상 기능이 성능에 영향을 미친다는 느낌이 들었습니다. 이것이 사실입니까? 그러나이 성능 차이는 눈에 띄지 않으며 조기 최적화를 수행하는 것처럼 보입니다. 권리?

12
가상 기능과 vtable은 어떻게 구현됩니까?
우리는 모두 C ++에 어떤 가상 함수가 있는지 알고 있지만, 어떻게 심층적으로 구현 될까요? vtable을 수정하거나 런타임에 직접 액세스 할 수 있습니까? vtable이 모든 클래스에 대해 존재합니까, 아니면 하나 이상의 가상 기능이있는 클래스에만 존재합니까? 추상 클래스는 적어도 하나의 항목의 함수 포인터에 대해 단순히 NULL을 가지고 있습니까? 단일 가상 기능을 사용하면 …

6
C # 인터페이스 메서드가 추상 또는 가상으로 선언되지 않은 이유는 무엇입니까?
인터페이스의 C # 메서드는 virtual키워드 를 사용하지 않고 선언되고 키워드를 사용하지 않고 파생 클래스에서 재정의됩니다 override. 이것에 대한 이유가 있습니까? 나는 그것이 단지 언어 편의라고 가정하고 분명히 CLR은 이것을 커버 아래에서 처리하는 방법을 알고 있지만 (메소드는 기본적으로 가상이 아님) 다른 기술적 이유가 있습니까? 파생 클래스가 생성하는 IL은 다음과 같습니다. class …

9
C ++ 클래스에서 가상 메서드를 사용할 때의 성능 비용은 얼마입니까?
C ++ 클래스 (또는 상위 클래스 중 하나)에 가상 메서드가 하나 이상 있다는 것은 클래스에 가상 테이블이 있고 모든 인스턴스에 가상 포인터가 있음을 의미합니다. 따라서 메모리 비용은 매우 명확합니다. 가장 중요한 것은 인스턴스의 메모리 비용입니다 (특히 인스턴스가 작은 경우, 예를 들어 정수를 포함하려는 경우 :이 경우 모든 인스턴스에 가상 포인터가 …


9
C #에서 기본적으로 비가 상 메서드를 구현하는 이유는 무엇입니까?
Java와 달리 C #은 기본적으로 메서드를 비가 상 함수로 취급하는 이유는 무엇입니까? 다른 가능한 결과보다 성능 문제 일 가능성이 더 높습니까? Anders Hejlsberg의 한 단락을 읽고 기존 아키텍처가 가져다주는 몇 가지 이점에 대해 생각했습니다. 그러나 부작용은 어떻습니까? 기본적으로 가상이 아닌 방법을 사용하는 것이 정말 좋은 절충안입니까?

9
C ++ 가상 함수를 안전하게 재정의
가상 함수가있는 기본 클래스가 있고 파생 클래스에서 해당 함수를 재정의하고 싶습니다. 파생 클래스에서 선언 한 함수가 실제로 기본 클래스의 함수를 재정의하는지 컴파일러에서 확인하는 방법이 있습니까? 이전 함수를 재정의하는 대신 실수로 새 함수를 선언하지 않았는지 확인하는 매크로 또는 무언가를 추가하고 싶습니다. 이 예를 보자 : class parent { public: virtual void …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.