ホームページ バックエンド開発 C#.Net チュートリアル 仮想関数と純粋仮想関数の違いは何ですか?

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

Nov 17, 2020 am 09:30 AM
純粋仮想関数 仮想関数

仮想関数と純粋仮想関数の違い: 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 関数のデバッグの詳細な説明: 仮想関数の問題をデバッグするには? C++ 関数のデバッグの詳細な説明: 仮想関数の問題をデバッグするには? May 02, 2024 pm 03:42 PM

仮想関数のデバッグ方法: ブレークポイントを設定してステップ実行し、assert() を使用して条件を確認し、デバッガー ツールを使用して動的型、関数スタックを確認し、仮想関数を再定義します。

C++ 関数のオーバーロードと仮想関数はどのように連携しますか? C++ 関数のオーバーロードと仮想関数はどのように連携しますか? Apr 26, 2024 am 10:09 AM

C++ での関数のオーバーロードを使用すると、異なるパラメーターを持つ同じ名前の関数の異なる実装を定義できます。また、仮想関数を使用すると、派生クラスで基本クラスの関数をオーバーライドしてポリモーフィズムを実現できます。関数のオーバーロードと仮想関数は連携して動作できます。基本クラスで仮想オーバーロード関数を設計することで、派生クラスは特定のパラメーターの組み合わせのバージョンのみをオーバーロードできるため、実際のケースでは異なる型の距離を計算するなど、より柔軟な多態性が提供されます。原点からの形。

C++ フレンド関数と仮想関数間の相互作用 C++ フレンド関数と仮想関数間の相互作用 Apr 16, 2024 pm 03:45 PM

C++ では、フレンド関数は仮想関数と対​​話するため、フレンド関数は仮想関数にアクセスし、派生クラスのフレンド関数を呼び出して基本クラスのプライベート メンバーにアクセスできます。この対話を使用して、継承階層に隠されたデータにアクセスしたり、多態性の動作を実装したりできます。

C++ で仮想関数を宣言して呼び出すにはどうすればよいですか? C++ で仮想関数を宣言して呼び出すにはどうすればよいですか? Apr 12, 2024 pm 04:03 PM

仮想関数は、派生クラスがその基本クラスのメンバー関数をオーバーライドできるようにするポリモーフィズム メカニズムです。 宣言: 関数名の前にキーワード virtual を追加します。呼び出し: 基本クラスのポインターまたは参照を使用して、コンパイラーは派生クラスの適切な実装に動的にバインドします。実際のケース: 基本クラス Shape とその派生クラス Rectangle および Circle を定義することにより、多態性における仮想関数の適用、面積の計算、形状の描画を示します。

C++ 関数は仮想宣言できますか?仮想関数の役割は何ですか? C++ 関数は仮想宣言できますか?仮想関数の役割は何ですか? Apr 19, 2024 pm 06:06 PM

C++ の仮想関数を使用すると、派生クラスが基本クラスから継承したメソッドを再定義してポリモーフィズムを実現できます。構文は次のとおりです。基本クラスで virtual キーワードを使用して仮想関数を宣言し、派生クラスでオーバーライドを使用してそれを再定義します。ポインターまたは参照を通じて仮想関数を呼び出すことにより、派生クラス オブジェクトは基本クラスの仮想関数を呼び出すことができます。仮想関数の主な機能には、ポリモーフィズムの実現、動的バインディングのサポート、および抽象化の提供が含まれます。

C++仮想関数の秘密が明らかに C++仮想関数の秘密が明らかに Apr 19, 2024 am 09:18 AM

仮想関数は動的バインディングを使用して実行時に呼び出される関数を決定し、ポリモーフィズムを実現します。その利点にはスケーラビリティと再利用性が含まれますが、オーバーヘッドと複雑さも生じます。仮想関数は、さまざまなタイプのオブジェクトのメソッドを統一された方法で実装するためによく使用されます。

純粋仮想関数は C++ でポリモーフィズムをどのように促進しますか? 純粋仮想関数は C++ でポリモーフィズムをどのように促進しますか? Jun 03, 2024 pm 08:01 PM

C++ では、純粋仮想関数は宣言されていますが、基本クラスには実装されていないため、派生クラスはポリモーフィズムを促進する特定の動作を実装する必要があります。派生クラスはすべての純粋仮想関数を実装する必要があり、それ以外の場合は抽象クラスになる必要があります。純粋仮想関数は、すべての純粋仮想関数を実装するクラスのみが抽象クラスへのポインターまたは参照として使用できるようにすることで、ポリモーフィズムを保証します。グラフィックス描画などの実際のケースでは、すべての形状オブジェクトがdraw()呼び出しに応答し、ポリモーフィズムを実現し、コードのスケーラビリティと保守性を向上させることができます。

C++ における仮想関数と純粋仮想関数の応用スキル C++ における仮想関数と純粋仮想関数の応用スキル Aug 22, 2023 am 11:33 AM

C++ の仮想関数と純粋仮想関数は、オブジェクト指向プログラミングを使用する多くのプログラマーによって一般的に使用されるツールです。これらを正しく使用することを前提とすると、プログラムの柔軟性と保守性が大幅に向上します。この記事では、仮想関数と純粋仮想関数のアプリケーション スキルについて説明し、いくつかの実践的な開発経験を共有します。 1. 仮想関数 1. 仮想関数とは何ですか?仮想関数は、ポリモーフィズムを実装するために使用される手法であり、これにより、クラスのメンバー関数を実行時に動的に決定できます。基本クラスのポインターまたは参照を使用して仮想関数が呼び出される場合、プログラムは

See all articles