-1

我正在编译这个头文件。我不明白为什么在 void 中它不会显示 getfunctions 中的值。从标题代码下面的示例中,我做得正确。

#ifndef STOCK_MARKET_CLASS
#define STOCK_MARKET_CLASS

// system defined preprocessor statement for cin/cout operations
#include <iostream >

// programmer defined preprocessor statement for setreal operation
#include "textlib.h"

// programmer defined preprocessor statement for String
#include "tstring.h"

class StockMarket
{
    private:
    String symbol;      // identifies the company
    double startingPrice;       // starting price of the stock
    double closingPrice;        // closing price of the stock

    public:
    // Constructor initializes the attributes that are the symbol, the starting price of the stock, and         
    // the closing price of the stock.
    StockMarket(String sym, double sPrice, double cPrice);

    // Takes the closing price of the stock and subtracts the starting price of the stock. Returns the 
    // amount of change in the price of the stock. 
    // You might not have any arguments.
    double change(double sPrice, double cPrice);

    // Returns the symbol.
    // You might not have any arguments.
    String getSymbol(String sym);

    // Returns the starting price of the stock.
    // You might not have any arguments.
    double getStartingPrice(double sPrice);

    // Returns the closing price of the stock.
    // You might not have any arguments.
    double getClosingPrice(double cPrice);

    // Outputs the following information that is listed below.
    // Stock Information for IBM:            <=== where IBM is the symbol
    // Starting Price       $XXX.XX
    // Closing Price        $XXX.XX
    //                  -------------
    // Difference           $XXX.XX
    // You might not have any arguments.
    void writeStockInfo();
};

//**********************************************************************
//             StockMarket Class Implementation
//**********************************************************************

// Constructor is passed arguments sym, sPrice, and cPrice
// Implementation of the constructor
StockMarket::StockMarket(String sym, double sPrice, double cPrice)
{
    symbol = sym;
    startingPrice = sPrice;
    closingPrice = cPrice;
}

// Function which takes the closing price of the stock and subtracts the starting price of the stock. Returns the 
// amount of change in the price of the stock. 
// Implementation of the function
// You might not have any arguments.
double StockMarket::change(double cPrice, double sPrice)
{
    return double (cPrice) - double (sPrice);
}

// Function to return the symbol.
// Implementation of the function
// You might not have any arguments.
String StockMarket::getSymbol(String sym)
{
    return sym;
}


// Function to return the starting price of the stock.
// Implementation of the function
// You might not have any arguments.
double StockMarket::getStartingPrice(double sPrice)
{
    return sPrice;
}


// Function to return the closing price of the stock.
// Implementation of the function
// You might not have any arguments.
double StockMarket::getClosingPrice(double cPrice)
{
    return cPrice;
}


// Function that outputs the following information that is listed below.
// Stock Information for IBM:            <=== where IBM is the symbol
// Starting Price       $XXX.XX
// Closing Price        $XXX.XX
//                  -------------
// Difference           $XXX.XX
// Implementation of the function
// You might not have any arguments.
void StockMarket::writeStockInfo()
{
    cout << "Stock Information for"<< setw(4) << getSymbol() << ":" << endl;
}

#endif                                          // STOCK_MARKET_CLASS

给我的例子

// return the player's batting average
double Baseball::getBatAvg ()
{

   if (atbats == 0)
      // average is 0.0 if player has no at bats
      return 0.0;
   else
      // batting average is the number of hits
      // divided by the number of at bats
      return double(hits)/double(atbats);
}

// format and output batting statistics
void Baseball::writeBattingStats()
{
   cout << "Player" << setw(3) << uniformNo
        << "  At bats" << setw(4) << atbats
        << "  Hits" << setw(4) << hits
        << "  Average " << setreal(1,3) << getBatAvg()
        << endl;
}

这是我的 cpp 代码

#include "stdafx.h"
// system defined header file that declares the input/output operations (cin/cout)
#include <iostream> 
using namespace std;
// system defined header file that declares parametric manipulators
#include <iomanip>
#include "Stock.h"

int main( )
{
    StockMarket IBMStock("IBM", 150.00, 300.00);

    IBMStock.writeStockInfo();


    system("PAUSE");
    return 0;

}
4

1 回答 1

0

您的 get 函数(例如 getSymbol)需要一个字符串类型的参数。

void StockMarket::writeStockInfo()
{
    cout << "Stock Information for"<< setw(4) << getSymbol() << ":" << endl;
}

您正在调用没有提供参数的 getSymbol()。这就是 IBMStock.writeStockInfo() 不显示任何结果的原因。

然而,这忽略了另一个问题。在您的 get 函数实现中,您只是返回您传入的参数......这没有多大意义。您应该做的是利用“this”指针。

String StockMarket::getSymbol()
{
    return this->symbol;
}

我认为您所追求的是属于 StockMarket 对象的名为 Symbol 的成员变量字符串。

另外,C++ 旁注。最好将头文件和实现文件分开。

编辑: 为澄清起见,您也可以在没有 this 指针的情况下访问成员变量

String StockMarket::getSymbol()
{
    return symbol;
}
于 2013-07-09T15:59:02.367 回答