汎用プログラミングは、テンプレートと仮想関数を通じて C で実装されます。関数のオーバーロードでは、テンプレートを使用して任意の型を受け入れます。関数のオーバーライドでは、仮想テンプレート関数を使用して、派生クラス独自の実装を提供します。実際の例には、ジェネリック関数のオーバーロードを使用して要素を検索したり、ジェネリック関数を使用して印刷コンテナ要素をオーバーライドしたりすることが含まれます。
ジェネリック プログラミングYes コードの記述を指します。データ型に依存しないため、コードが簡素化され、再利用されます。 C では、テンプレートと仮想関数を使用して汎用プログラミングを実装できます。
関数のオーバーロード同じ名前を使用し、異なるパラメーター型を持つ複数の関数を作成できるようにします。テンプレートを使用すると、関数オーバーロードがあらゆる種類のパラメーターを受け入れるようにできます。
template <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
関数オーバーライド派生クラスが親クラスの仮想関数の独自の実装を提供できるようにします。仮想テンプレート関数を使用して汎用の書き換えを実装できます。
class Base { public: virtual void print() { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: virtual void print() override { std::cout << "Derived class" << std::endl; } };
実用的なケース
汎用関数のオーバーロードを使用して要素を検索する
template <typename T> bool find(std::vector<T>& vec, T value) { for (const auto& element : vec) { if (element == value) { return true; } } return false; } int main() { std::vector<int> int_vec = {1, 2, 3}; std::cout << std::boolalpha << find(int_vec, 2) << std::endl; // true std::vector<std::string> str_vec = {"Hello", "World"}; std::cout << std::boolalpha << find(str_vec, "World") << std::endl; // true }
汎用関数を使用して印刷コンテナ要素を書き換える
template <typename T> void print_container(std::vector<T>& vec) { for (const auto& element : vec) { std::cout << element << " "; } std::cout << std::endl; } int main() { std::vector<int> int_vec = {1, 2, 3}; print_container(int_vec); // 输出: 1 2 3 std::vector<std::string> str_vec = {"Hello", "World"}; print_container(str_vec); // 输出: Hello World }
以上がC++ 関数のオーバーロードと書き換えにおける汎用プログラミングの適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。