2016-04-21 106 views
3

好吧,我創建了一個模擬美化公司的程序,所以我們必須計算草皮和圍欄的成本。爲什麼我的程序輸出一個巨大的小數?

  Parkton Landscaping 
Enter Length: 10 
Enter width: 12 


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

草皮是假設= 56.40 和柵欄例如所以,當我在長度和寬度輸入他們出去放巨量小數是假設= 990.00

請幫助這裏是我的代碼和兩文件

#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; 
} 

這裏是頭文件:

#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); 
    } 

} 

頭文件#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; 


} 

回答

2

因爲你從來沒有初始化的有效值,這意味着Geometry::widthGeogrpapy::length是未初始化的並且有不確定值的對象。使用它們未初始化導致未定義的行爲

+0

那麼我會初始化這些對象的幾何頭文件? –

+0

@BartAlen你應該在調用'getArea'之前調用'setLength'和'setWidth'函數。 –

+0

我試過了,仍然得到相同的結果@Joachim Pileborg –

相關問題