Maison > développement back-end > C++ > La surcharge de fonctions en C peut-elle être obtenue en fonction de la valeur de retour, et si oui, comment ?

La surcharge de fonctions en C peut-elle être obtenue en fonction de la valeur de retour, et si oui, comment ?

Barbara Streisand
Libérer: 2024-11-28 21:59:12
original
823 Les gens l'ont consulté

Can Function Overloading in C   Be Achieved Based on Return Value, and if so, How?

Rechargement de fonctions par valeur de retour

Introduction

La surcharge de fonctions en C implique généralement de différencier les fonctions en fonction de leurs types de paramètres . Cependant, il est également possible de surcharger les fonctions en fonction de leurs valeurs de retour. Cela vous permet de définir des fonctions qui renvoient différents types de données en fonction de la façon dont elles sont utilisées.

Énoncé du problème

Considérez la tâche suivante :

int n = mul(6, 3); // n = 18
std::string s = mul(6, 3); // s = "666"
Copier après la connexion

Ici, vous devez définir une fonction nommée mul qui renvoie soit un entier, soit une chaîne, selon la valeur de retour de sa valeur. utilisé.

Approches de solution

Saisie explicite :

Une approche consiste à différencier explicitement les appels en tapant. Par exemple, vous pouvez définir deux fonctions distinctes :

int mul(int, int);
std::string mul(char, int);
Copier après la connexion

Et les appeler comme suit :

int n = mul(6, 3); // n = 18
std::string s = mul('6', 3); // s = "666"
Copier après la connexion

Pointeur factice :

Un autre La méthode consiste à ajouter un paramètre factice à chaque fonction, obligeant le compilateur à choisir le bon. Par exemple :

int mul(int *, int, int);
std::string mul(std::string *, char, int);
Copier après la connexion

Et utilisez-les avec :

int n = mul((int *) NULL, 6, 3); // n = 18
std::string s = mul((std::string *) NULL, 54, 3); // s = "666"
Copier après la connexion

Modèle de la valeur de retour (option 1) :

Vous pouvez créer une fonction "factice" avec du code qui ne sera pas compilé s'il est instancié. Ensuite, définissez des versions de modèles spécialisées pour les types de retour souhaités :

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<> std::string mul<std::string>(int, int);
Copier après la connexion

Utilisez-les comme suit :

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>(54, 3); // s = "666"
Copier après la connexion

Modèle de la valeur de retour (option 2) :

Pour les cas avec des paramètres différents, vous pouvez définir des spécialisations de modèles distinctes avec des types de paramètres distincts :

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<typename T> T mul(char, int);
template<> std::string mul<std::string>(char, int);
Copier après la connexion

Et appelez-les comme :

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>('6', 3); // s = "666"
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal