Maison  >  Article  >  développement back-end  >  Réécriture de fonctions et programmation de modèles : révéler les utilisations magiques de l'expansion et de la généralisation du code

Réécriture de fonctions et programmation de modèles : révéler les utilisations magiques de l'expansion et de la généralisation du code

王林
王林original
2024-05-05 11:00:01962parcourir

La réécriture de fonctions et la programmation de modèles sont des techniques puissantes en C++ pour réaliser l'extension et la généralisation du code. La substitution de fonctions permet l'extension en remplaçant les méthodes de classe de base dans les classes dérivées ; la programmation de modèles permet la généralisation en créant un code générique qui peut être utilisé dans différents types. Un exemple pratique démontre l'utilisation de la réécriture de fonctions et de la programmation de modèles pour calculer l'aire d'une forme, montrant l'utilisation des deux techniques pour étendre et généraliser le code.

Réécriture de fonctions et programmation de modèles : révéler les utilisations magiques de lexpansion et de la généralisation du code

Réécriture de fonctions et programmation de modèles : révéler la puissance de l'extension de code et de la généralisation du code

La réécriture de fonctions et la programmation de modèles sont des techniques puissantes de programmation C++ qui permettent aux développeurs de créer du code évolutif et polyvalent.

Remplacement de fonctions

Le remplacement de fonctions permet l'extension du code en permettant de fournir des implémentations alternatives des méthodes de classe de base dans les classes dérivées. La syntaxe est la suivante :

class Derived : public Base {
public:
  // 重写基类方法
  override double calculate() {
    // 自定义实现
    ...
  }
};

Programmation de modèles

La programmation de modèles permet la création de code générique pouvant être utilisé pour différents types. La syntaxe est la suivante :

template<typename T>
class MyClass {
  T data;
  ...
};

Un exemple pratique

Considérons un programme pour calculer les aires de différentes formes :

// 使用基类和函数重写
class Shape {
public:
  virtual double calculateArea() = 0;
};

class Square : public Shape { // 使用函数重写扩展基类
public:
  double side;
  Square(double side) : side(side) {}
  double calculateArea() override { return side * side; }
};

class Circle : public Shape { // 再次使用函数重写扩展基类
public:
  double radius;
  Circle(double radius) : radius(radius) {}
  double calculateArea() override { return 3.14 * radius * radius; }
};

int main() {
  Square s(5);
  Circle c(10);
  cout << "Square area: " << s.calculateArea() << endl;
  cout << "Circle area: " << c.calculateArea() << endl;
}
// 使用模板编程
template<typename T>
class Shape {
  T side;
public:
  Shape(T side) : side(side) {}
  T calculateArea() { return side * side; } // 通用实现
};

// 使用模板实例化创建特定形状
class Square : public Shape<double> {};
class Circle : public Shape<double> {};

int main() {
  Square s(5);
  Circle c(10);
  cout << "Square area: " << s.calculateArea() << endl;
  cout << "Circle area: " << c.calculateArea() << endl;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn