Mon professeur m'a confié cette tâche.Erreur logique dans le modèle de fonction
Mettre en oeuvre une fonction générique appelée Max, qui prend 3 arguments de type générique et un rendement maximal de ces 3. Mettre en œuvre une fonction spécialisée pour char * types.
Voici mon code:
#include <iostream>
#include <string>
using namespace std;
template<typename T>
T Max(T first,T second,T third)
{
if(first > second)
{
if(first > third)
{
return first;
}
else
{
return third;
}
}
else if(second > third)
{
return second;
}
else
{
return third;
}
}
template<>
char* Max(char* first,char* second,char* third)
{
if(strcmp(first, second) > 0)
{
if(strcmp(first, third) > 0)
{
return first;
}
else
{
return third;
}
}
else if(strcmp(second, third) > 0)
{
return second;
}
else
{
return third;
}
}
int main(void)
{
cout << "Greatest in 10, 20, 30 is " << Max(10, 20, 30) << endl;
char a = 'A';
char b = 'B';
char c = 'C';
char Cptr = *Max(&a, &b, &c);
cout << "Greatest in A, B ,C is " << Cptr << endl;
string d = "A";
string e = "B";
string f = "C";
string result = *Max(&d, &e, &f);
cout << "Greatest in A, B, C is " << result << endl;
}
Sortie:
plus grand en 10, 20, 30 est 30
plus grand en A, B, C est C
Le meilleur en A, B, C est A
Problème:
Si je passe en fonction des types de données ombles Max A, B, C, elle retourne C, mais si je passe chaîne A datatypes, B, C retourne A.
Pourquoi Est-ce que ça retourne A ici?
merci pour votre aide. – Searock