2016-07-11 11 views
-3

Ich schrieb dieses Temperaturumwandlungsprogramm beim Üben von Klassen und Funktionen in C++. Während der Code funktioniert, bin ich nicht ganz zufrieden damit. Gibt es eine Möglichkeit, diesen Code effizienter zu machen? Gibt es anhaltende Fehler in meinem Code? Ich würde es lieben, wenn Sie meinen Code kritisieren würden. Vielen Dank.Wie kann ich diesen Code verbessern? (C++ Temperaturkonverter)

#include<iostream> 
#include<string> 

class convert{ 
public: 
int c_con(float y){ 
float f; 
    std::cout << "Converting to Fahrenheit: "; 
    f=y*9/5+32; 

    std::cout << f << std::endl; 
    return 0; 
} 
int f_con(float x){ 
float c; 
    std::cout << "Converting to Celsius:"; 
    c=(x-32)*5/9; 

    std::cout << c << std::endl; 
return 0; 
} 

}; 


int main(){ 
char a; 
int b; 
    convert temp; 

    std::cout << "__________Temp Converter-----------" << std::endl; 
    std::cout << "What would like to convert? (c/f): "; 
    std::cin >> a; 

    switch(a) 
    { 
    case 'c' : std::cout << "Input Celsius: "; 
      std::cin >> b; 
      temp.c_con(b); 
      break; 
    case 'f' :std::cout << "Input Fahrenheit: "; 
       std::cin >> b; 
       temp.f_con(b); 
       break; 
    default: std::cout << "Wrong input."; 
    } 
return 0; 
} 
+4

Sie sollten dies auf http://codereview.stackexchange.com/ veröffentlichen, wenn es keine Probleme mit Ihrem Code gibt. – ifma

+1

Geben Sie aus den Konvertierungsfunktionen (wie den konvertierten Temperaturen) etwas aussagekräftiges zurück und verschieben Sie die Druckanweisungen aus den Konvertierungsfunktionen. – Galik

+0

Ich stimme, diese Frage als Off-Topic zu schließen, da dies auf Code-Review gehört, aber es gibt keine Option dafür in der "Diese Frage gehört auf einer anderen Site im Stack Exchange-Netzwerk" –

Antwort

2

Ich bin sicher, dass andere bessere Vorschläge haben, aber einige sehr grundlegende Verbesserungen sind:

#include<iostream> 
// Don't import libraries you don't use. 

class Convert //Classes typically have the leading character Capitalized. 
{ 
public: 
    /*Give meaningful function names.*/ 
    float celsius_To_Fahrenheit(const float &y) /*Placing "const" in your parameters is good practice if you don't need/want to change the parameter inside the function.*/ 
    { 
     //Try not to use local variables in classes, use member variables if you do need a variable. 
     //I'm not sure either member function *needs* a local variable. 
     //And I don't think this very simple classes needs local variables, yet. 
     return y*9/5+32; /*Use "return" to return *something* otherwise, use "void" functions.*/ 
    } 

    float fahrenheit_To_Celsius(const float &x)/*And using "&" to pass by reference is good in combination with "const", this makes your code more efficient so multiple copies don't exist of the same variable.*/ 
    { 
     //Avoid putting std::cout statements inside classes as a habit. 
     return (x-32)*5/9; 
    } 
}; 

int main() 
{ 
    char choice = 'z'; //Give meaningful variable names. 
    float temperature = 1; // Initialize local variables! 
    Convert temp_converter; 

    std::cout << "__________Temp Converter-----------" << std::endl; 
    std::cout << "What would like to convert? (c/f): "; 
    std::cin >> choice; 

    switch(choice) 
    { 
     case 'c' : std::cout << "Input Celsius: "; 
      std::cin >> temperature; 
      std::cout << temperature << " converted to Fahrenheit is " << temp_converter. celsius_To_Fahrenheit(temperature) << std::endl; 
      break; 
     case 'f' :std::cout << "Input Fahrenheit: "; 
      std::cin >> temperature; 
      std::cout << temperature << " converted to Celcius is " << temp_converter. fahrenheit_To_Celsius(temperature) << std::endl; 
      break; 
     default: 
      std::cout << "Wrong input."; 
    } 
    return 0; 
} 
+1

Und wenn Sie _do_ verwenden lokale Variablen, lassen Sie sie nicht uninitialisiert. Sie haben einen potentiellen Fehler, wenn 'float f;/* ... anderer Code ... */f = 1; 'benutzt versehentlich' f' vor der Zuweisung, ist es sicherer, 'float f = 1;' zu haben. – CompuChip

+0

Danke, dass du das unterstrichen hast! – NonCreature0714

1

Ich werde nicht eine Wand von Code als @ NonCreature0714 Beitrag wurde bereits getan.

Ich hätte keine Klasse namens convert. Werden Sie auch volt_amperes und watts drin stecken?

Auch was passiert, wenn Sie eine ganze Reihe von Funktionen haben, die Celsius verwenden, und eine andere Ladung, die Fahrenheit verwendet, würden sie alle zusammen in der gleichen Klasse leben? Persönlich hätte ich eine Code-Einheit namens celsius und eine andere Code-Einheit namens fahrenheit und dann eine dritte Einheit namens celsius_fahrenheit, die Konvertierungen zwischen den beiden behandeln würde. Dies bedeutet, dass Sie Code haben können, der nur Celsius benötigt, ohne die ganze Fahrenheit zu ziehen.

Verwandte Themen