C ++数组输出地址?

时间:2012-10-08 06:16:28

标签: c++ arrays operator-overloading

我是第一次发布的,并且能够几乎完成这项任务。该程序没有出错,但我收到了不良后果。输出似乎是输出数组地址而不是输入的数据。或者至少我认为这是基于我非常有限的知识。任何人都可以帮助指导我如何解决这个问题?我整天都在努力工作,在这个时刻,我想我已经准备好了。非常感谢任何建议,谢谢!

// Amanda 
// SoccerPlayer.cpp : main project file.
// October 6, 2012
/* a. Design a SoccerPlayer class that includes three integer fields: a player's jersey     number,
number of goals, and number of assists. Overload extraction and insertion operators for    the class.
b. Include an operation>() function for the class. One SoccerPlayer is considered greater
than another if the sum of goals plus assists is greater.
c. Create an array of 11 SoccerPlayers, then use the > operator to find the player who  has the
greatest goals plus assists.*/

#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<string>
using namespace std;



class SoccerPlayer
{
    friend std::ostream& operator<<(std::ostream&, const SoccerPlayer&);
    friend istream& operator>>(istream&, SoccerPlayer&);
private:
    int jerseyNum;
    int numGoals;
    int numAssists;
public:
    SoccerPlayer(int, int, int);
    int score;
    int operator>(SoccerPlayer&);
    void DisplayStar();

};

SoccerPlayer::SoccerPlayer(int jersey = 0, int goal = 0, int assist = 0)
{
    jerseyNum = jersey;
    numGoals = goal;
    numAssists = assist;
} 

void SoccerPlayer::DisplayStar()
{
    cout<<"Player Number: "<< jerseyNum <<endl;
    cout<<"Goals Scored:  "<< numGoals <<endl;
    cout<<"Assists Made:  "<< numAssists <<endl;
} 

std::ostream& operator<<(std::ostream& player,  const SoccerPlayer& aPlayer)
{
    player << "Jersey #" << aPlayer.jerseyNum <<
        " Number of Goals " << aPlayer.numGoals << 
        " Number of Assists " << aPlayer.numAssists;
    return player;
}

std::istream& operator>>(std::istream& inPlayer, SoccerPlayer& aPlayer)
{

    cout << "Please enter the jersey number: ";
    inPlayer >> aPlayer.jerseyNum;
    cout << "Please enter the number of goals: ";
    inPlayer >> aPlayer.numGoals;
    cout << "Please enter the number of assists: ";
    inPlayer >> aPlayer.numAssists;

    aPlayer.score=(aPlayer.numGoals) + (aPlayer.numAssists);



    return inPlayer;
}

int SoccerPlayer::operator>(SoccerPlayer& aPlayer)
{

    int total = 0;
    if (score > aPlayer.score)
        total = 1;
    return total;


}

int main()
{
const int sz = 11;
int x;

SoccerPlayer aPlayer[sz];

for(x = 0; x < sz; ++x)
cin >> aPlayer[x];

{
 double max = aPlayer[x].score; 
 for(int i = 1; i<sz; ++i)
 {
     if(aPlayer[i] > aPlayer[x])
     {
         max=aPlayer[i].score;
     }

  }
 cout << max << endl;
 cout << aPlayer[x];
}
    _getch();
    return 0;
}

3 个答案:

答案 0 :(得分:2)

看起来好像你想要一个循环,但它的格式不正确:

for(x = 0; x < sz; ++x)
cin >> aPlayer[x];

{
 double max = aPlayer[x].score; 
 for(int i = 1; i<sz; ++i)
 {
     if(aPlayer[i] > aPlayer[x])
     {
         max=aPlayer[i].score;
     }

  }
 cout << max << endl;
 cout << aPlayer[x];
}

你的意思是(我认为)double max ...应该在循环中,但cin >> ...行在 for语句之后来到 大括号。因此,迭代仅适用于cin >> ...语句;一旦完成,控制就会进行到double max = aPlayer[x].score;,但是x(从for(...)遗留下来)等于sz,所以aPlayer[x]在数组之外,在无人的情况下 - 土地。

cin >> ...放在括号内。

答案 1 :(得分:1)

问题是您只打印元素aPlayer[x]。但请注意,您的第一个for循环在x = 11时终止。好吧,那是一个超过数组末尾的那个,所以真的,你输出了垃圾。

我只是尝试使用aPlayer[0]来获得预期结果。

答案 2 :(得分:0)

这就是我最终的结果。谢谢大家的帮助!

// Amanda 
// SoccerPlayer.cpp : main project file.
// October 6, 2012
/* a. Design a SoccerPlayer class that includes three integer fields: a player's jersey number,
number of goals, and number of assists. Overload extraction and insertion operators for  the class.
b. Include an operation>() function for the class. One SoccerPlayer is considered greater
than another if the sum of goals plus assists is greater.
c. Create an array of 11 SoccerPlayers, then use the > operator to find the player who has the
greatest goals plus assists.*/

#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<string>
using namespace std;



//soccer player class - see above description
class SoccerPlayer
{
    friend std::ostream& operator<<(std::ostream&, const SoccerPlayer&);
    friend istream& operator>>(istream&, SoccerPlayer&);
private:
    int jerseyNum;
    int numGoals;
    int numAssists;
public:
    SoccerPlayer(int, int, int);
    int score;
    int operator>(SoccerPlayer&);
    void DisplayStar();

};

//soccerplayer constructor
SoccerPlayer::SoccerPlayer(int jersey = 0, int goal = 0, int assist = 0)
{
    jerseyNum = jersey;
    numGoals = goal;
    numAssists = assist;
}
//to display star player
void SoccerPlayer::DisplayStar()
{
    cout<<"Jersey #: "<< jerseyNum <<endl;
    cout<<"Goals Scored:  "<< numGoals <<endl;
    cout<<"Assists Made:  "<< numAssists <<endl;
} 

//overload operator out
std::ostream& operator<<(std::ostream& player,  const SoccerPlayer& aPlayer)
{
    player << "Jersey #" << aPlayer.jerseyNum <<
        " Number of Goals " << aPlayer.numGoals << 
        " Number of Assists " << aPlayer.numAssists;
    return player;
} 
//overload operator in
std::istream& operator>>(std::istream& inPlayer, SoccerPlayer& aPlayer)
{

    cout << "Please enter the jersey number: ";
    inPlayer >> aPlayer.jerseyNum;
    cout << "Please enter the number of goals: ";
    inPlayer >> aPlayer.numGoals;
    cout << "Please enter the number of assists: ";
    inPlayer >> aPlayer.numAssists;

    aPlayer.score=(aPlayer.numGoals) + (aPlayer.numAssists);
    return inPlayer;
} 

//overload operator greater than
int SoccerPlayer::operator>(SoccerPlayer& aPlayer)
{
    int total = 0;
    if (score > aPlayer.score)
        total = 1;
    return total;
}
//main declaration
int main()
{
    //11 players
    const int sz = 11;
    int x;
    SoccerPlayer aPlayer[sz];
    double max = 0;
    //to display star
    SoccerPlayer Star;
//allow user to input players, show what they input
for(x = 0; x < sz; ++x)
{
    cin >> aPlayer[x];
    cout << aPlayer[x] << endl << endl;
    for(int i=1; i<sz; i++)
    {
        Star=aPlayer[0];
        if(aPlayer[i] > aPlayer[i+1])

            Star=aPlayer[i];

    }
} 
//show star player
cout << "The Star Player: "<< endl;
Star.DisplayStar();
_getch();
return 0;
}