분석 함수와virtual
2150 단어 virtual
#include <iostream.h>
struct A
{
virtual ~A() {cout<<"~A()
";}
};
struct B: public A
{
~B() {cout<<"~B()
";}
};
void main()
{
A* p = new B;
delete p;
}
만약 A의 분석 함수가virtual이 아니라면, 이때는 B의 분석 함수를 먼저 호출한 다음에 A의 분석 함수를 호출하는 것이 아니다.출력:
~A();
A의 분석 함수가 virtual이면 먼저 ~ B (), 그리고 ~ A () 로 출력됩니다.
~B();
~A();
클래스가 파생될 경우 분석 함수는 일반적으로virtual로 정의해야 하는데 주로 메모리 유출을 방지하는 것이 아니라 정확한 분석을 위한 것이다.폐쇄류 (즉 파생되지 않음) 라면 가상 클래스로 정의하지 마십시오.허함수는 결국 소모가 비교적 크다.
가상 기능을 사용하지 않는 경우:
성명 기류의 분석 함수가virtual인 것은 항상memory leak을 방지하기 위한 것이 아니다. 또한 이것은 일반적인 원칙일 뿐이다. (기류에 허함수가 있으면 그 분석 함수를virtual로 성명한다.)만약 당신의 분석 함수가 아무 일도 하지 않는다면, 효과적으로virtual이라고 성명하지 않아도 무방하다.
왜 내연 함수, 구조 함수, 정적 구성원 함수는virtual 함수일 수 없습니까?
(1) 내연 함수
내연 함수는 컴파일링 시기에 전개되고 허함수의 특성은 운행할 때만 동적 컴파일링되기 때문에 양자가 모순되어 내연 함수를 허함수로 정의할 수 없다.
(2) 구조 함수
구조 함수는 새로운 대상을 만드는 데 사용되며, 허함수의 운행은 대상을 바탕으로 이루어진다.구조 함수를 집행할 때 대상이 아직 형성되지 않았기 때문에 구조 함수를 허함수로 정의할 수 없다.
(3) 정적 구성원 함수
정적 구성원 함수는 하나의 클래스에 속하며,this지침이 없으면 대상의 판별을 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
분석 함수virtual과 비virtual의 차이일반적인 원칙으로, 만약 하나의 클래스가 허함수를 정의한다면, 그 분석 함수는virtual이어야 한다.허함수를 정의하면 이 클래스는 계승되고 기본 클래스의 바늘을 통해 하위 클래스의 대상을 가리키며 다태성을 얻을 수...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.