ホームページ > バックエンド開発 > C++ > C++ 関数のオーバーロードと書き換えにおける汎用プログラミングの適用

C++ 関数のオーバーロードと書き換えにおける汎用プログラミングの適用

WBOY
リリース: 2024-04-21 11:54:01
オリジナル
499 人が閲覧しました

汎用プログラミングは、テンプレートと仮想関数を通じて C で実装されます。関数のオーバーロードでは、テンプレートを使用して任意の型を受け入れます。関数のオーバーライドでは、仮想テンプレート関数を使用して、派生クラス独自の実装を提供します。実際の例には、ジェネリック関数のオーバーロードを使用して要素を検索したり、ジェネリック関数を使用して印刷コンテナ要素をオーバーライドしたりすることが含まれます。

C++ 函数重载和重写中泛型编程的应用

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート