2016-04-21 7 views
3

Okay, also habe ich ein Programm erstellt, das ein Landschaftsbauunternehmen simuliert, und so müssen wir die Kosten für Sod und Zaun berechnen. Also, wenn ich in eingeben sowohl die Länge und Breite sie löschte große Dezimalzahlen zum BeispielWarum gibt mein Programm eine große Dezimalzahl aus?

  Parkton Landscaping 
Enter Length: 10 
Enter width: 12 


     Lanscaping Costs 
Sod = 6871947680.00 
Fence = 19327352760.00 
Press any key to continue . . . 

Sod ist wohl zu = 56.40 und Zaun ist wohl zu = 990,00

bitte helfen hier ist mein Code und beide

Dateien
#include <iostream> 
#include <iomanip> 

using namespace std; 

#include "c:\Users\barta\OneDrive\Documents\Visual Studio 2015\Projects\Project 6\Project 6\Geometry.h" 
#include "Pricing.h" 

int main() 
{ 
    int length, width; 
    Pricing landscape; 
    Geometry geo; 
    const double Fenceprice = 22.50; 
    const double Sodprice = .47; 
    cout << "\t Parkton Landscaping " << endl; 
    cout << "Enter Length: "; 
    cin >> length; 
    cout << "Enter width: "; 
    cin >> width; 
    //Pricing(length, width); 
    //geo.getLength(); 
    //geo.getWidth(); 
    std::cout << std::fixed << std::setprecision(2); 
    landscape.displayOutput(); 
    cout << "Sod = " << landscape.getsodCost(length) << endl; 
    cout << "Fence = " << landscape.getFenceCost(Fenceprice) << endl; 



    system("pause"); 
    return 0; 
} 

hier ist die Header-Datei:

#pragma once 
class Geometry 
{//an object is how you access the class 
public:// where the public function definitions are created 
    Geometry();// Default Constructor 
    Geometry(int, int); 
    Geometry(int); 
    void setLength(int); //assigns length 
    void setWidth(int); //assigns width 
    void setSide(int); //assigns side 
    //Constructor function that recieves the values for the rectangle 
    //Constructor function that recieves values for the cube 
    int getLength(), 
     getWidth(), 
     getSide(), 
     getArea(), 
     getPerimeter(), 
     getSurfaceArea(); 

private: //where the private members are created 
    int length, 
     width, 
     side; 
    void checkNum(int); //function that checks to see if the number is less than 0 

}; 
Geometry::Geometry() 
{ 
    length = length; 
    width = width; 
    side = 0; 
} 
Geometry:: Geometry(int length, int width) /*function recieves 2 intergers and calls checkNum to validate if */ 
{ 
    setLength(length); 
    setWidth(width); 
    checkNum(length); 
    checkNum(width); 
} 
Geometry:: Geometry(int sides) 
{ 
    checkNum(sides); 
    setSide(sides); 

} 
int Geometry::getLength() 
{ 
    return length; 
} 
int Geometry::getWidth() 
{ 
    return width; 
} 
int Geometry::getSide() 
{ 
    return side; 
} 
int Geometry::getArea() 
{ 
    return length * width; 
} 
int Geometry::getPerimeter() 
{ 
    return 2 * (length + width); 
} 
int Geometry::getSurfaceArea() 
{ 

    return 6 * (side * side); 
} 
void Geometry::setLength(int len) 
{ 
    length = len; 
    checkNum(len); 
} 
void Geometry::setWidth(int widths) 
{ 
    width = widths; 
    checkNum(widths); 
} 
void Geometry::setSide(int s) 
{ 
    side = s; 
    checkNum(s); 
} 

void Geometry::checkNum(int num) //function checks to see if the number is less than zero 
{ 

    if (num <= 0) 
    { 
     cout << "!!!!!!!!WARNING!!!!!! this isnt a number" << " program will now exit......" << endl; 
     system("pause"); 
     exit(1); 
    } 

} 

Header-Datei # 2

#include "Geometry.h" 

class Pricing : Geometry 
{ 
public: 
    Pricing(); 
    Pricing(int length, int width); 
    double getsodCost(double); 
    double getFenceCost(double); 
    void displayOutput(); 
private: 

}; 
Pricing::Pricing(int length, int width) :Geometry(length, width) 
{ 

} 
Pricing::Pricing() 
{ 

} 
double Pricing::getsodCost(double price) 
{ 
    getArea(); 
    return getArea()*price; 
} 
double Pricing::getFenceCost(double price) 
{ 
    getPerimeter(); 
    return getPerimeter()*price; 
} 
void Pricing::displayOutput() 
{ 
    cout << "\n\n"; 
    cout << "\t Lanscaping Costs " << endl; 


} 

Antwort

2

Weil Sie nie die Objekte mit gültigen Werten initialisieren, was bedeutet, Geometry::width und Geogrpapy::length sind nicht initialisierten und haben unbestimmte Werte. Wenn sie nicht initialisiert werden, führt dies zu undefiniertem Verhalten.

+0

Also würde ich diese Objekte in der Geometrie-Header-Datei initialisieren? –

+0

@BartAlen Sie sollten wahrscheinlich die Funktionen 'setLength' und' setWidth' aufrufen, bevor Sie 'getArea' aufrufen. –

+0

Ich habe das versucht und immer noch das gleiche Ergebnis @ Joachim Pileborg –