ホームページ  >  記事  >  バックエンド開発  >  仮想関数と純粋仮想関数の違いは何ですか?

仮想関数と純粋仮想関数の違いは何ですか?

青灯夜游
青灯夜游オリジナル
2020-11-17 09:30:5328329ブラウズ

仮想関数と純粋仮想関数の違い: 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。