>백엔드 개발 >C#.Net 튜토리얼 >가상함수와 순수가상함수의 차이점은 무엇인가요?

가상함수와 순수가상함수의 차이점은 무엇인가요?

青灯夜游
青灯夜游원래의
2020-11-17 09:30:5328388검색

가상 함수와 순수 가상 함수의 차이점: 1. 순수 가상 함수에는 정의만 있고 구현은 없지만 가상 함수에는 정의와 구현 코드가 모두 있습니다. 2. 순수 가상 함수를 포함하는 클래스는 객체를 정의할 수 없지만 가상 함수를 포함하는 클래스는 정의할 수 있습니다.

가상함수와 순수가상함수의 차이점은 무엇인가요?

관련 추천: "C++ 동영상 튜토리얼"

가상 함수(불순한 가상)

 C++ 가상 함수의 주요 기능은 "런타임 다형성"이며, 가상 함수의 구현은 다음에서 제공됩니다. 하위 클래스에 대한 기본 함수 구현을 제공하는 상위 클래스.
하위 클래스는 하위 클래스의 특수화를 달성하기 위해 상위 클래스의 가상 함수를 재정의할 수 있습니다.
다음은 상위 클래스의 가상 함수입니다.

class A
{
public:
     virtual void ss()
    {
        cout<<"我是基类的虚函数"<<endl;
    }
};

순수 가상 함수(순수 가상)

순수 가상 함수를 포함하는 C++ 클래스를 "추상 클래스"라고 합니다. 추상 클래스는 new를 사용하여 객체를 생성할 수 없습니다. 이 순수 가상 함수를 구현하는 하위 클래스만 새 객체를 생성할 수 있습니다.
  C++의 순수 가상 함수는 "선언만 제공하고 구현은 없음"에 가깝고 하위 클래스에 대한 제약이며 "인터페이스 상속"입니다.
 C++의 순수 가상 함수도 일종의 "런타임 다형성"입니다.
 예를 들어 다음 클래스에는 "추상 클래스"인 순수 가상 함수가 포함되어 있습니다.

class A
{
public:
    virtual void out1(string s)=0;  //我是基类的虚函数 
};

예:

#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
class a
{
	private:
	
	public:
		a(){      //构造函数用内联函数的形式 
			
		}
		//虚函数 
		virtual  void  xhs(){   	   //这个虚函数必须得在基类中实现 
			cout<<"我是基类的虚函数"<<endl;//即使是空的虚函数也要在基类中实现 
		}  //派生类中可以不写这个函数,但是派生类对象调用时会调用积累的虚函数 
		
		//纯虚函数 
		virtual void cxhs() =0;  //这个纯虚函数不在基类中实现,必须在子类中实现 
		
}; 
class b:public a
{
	private:
		
    public:
    	void xhs(){         //这个是可有可无的 
    		cout<<"我是派生类覆盖基类虚函数的函数"<<endl; 
		}                        //*
		                         //*
		void cxhs(){         //这个是必须有实现的 
			cout<<"我是派生类覆盖基类虚函数的函数"<<endl; 
		}       //*              //*
}; 				//* 			 //*
int main()      //*              //*
{               //*              //*
	b c;        //*              //* 
	c.xhs();    //*           //调用派生类的 
	c.cxhs();//调用派生类的 
}

가상 함수와 순수 가상 함수의 차이점

1) 순수 가상 함수만 정의는 있지만 구현은 없습니다. 그리고 가상 함수에는 정의와 구현 코드가 모두 있습니다.

순수 가상 함수에는 일반적으로 코드 구현 부분이 없습니다. 예를 들어 virtual void print() = 0; 2)일반 가상 함수에는 코드 구현 부분이 있어야 합니다. 그렇지 않으면 정의되지 않은 함수 오류가 발생합니다.

2) 순수 가상 함수를 포함하는 클래스는 객체를 정의할 수 없지만, 가상 함수를 포함하는 클래스는 정의할 수 있습니다.

위 내용은 가상함수와 순수가상함수의 차이점은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.