2016-04-21 120 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 –

相关问题