Hi
I am trying to teach myself C++ coding but am having a problem with classes and objects. I need to pass my objects to a function which may use various object attributes in calculations but may also change the original values of these attributes. My code is:

#include <cstdlib>
#include <iostream>
#include <ctime>
#include "fishclass.hpp"
using namespace std;
int main ()
{
int n, i = 0;
srand(static_cast<unsigned>(time(0)));

cout << "How many fish in population? ";
cin >> n;

Fish river[n]; //creating array of objects
for(int i=0;i<n;i++)
{
river.setWeight();
river.setAge();
river.setEggs();
}

for(int i=0;i<n;i++) //outputting info
{
river.getWeight();
river.getAge();
river.getEggs();
cout << "Fish " << i << " Weight " << river.weight;
cout << " Age " << river.age << " Eggs " << river.eggs << endl;
}
system ( "PAUSE" );
return 0;
}


So I have a class called fish, which have objects called river (ie these are fish in a river). the river objects have attributes called age, weight and eggs. I need to pass the whole array of objects to a function where I can play with the attribute values or change them if necessary.

I have been playing with pointers and references but can not get them to work with an array of objects like I have.

Pls help a newby!
John G.

I need to pass the whole array of objects to a function where I can play with the attribute values or change them if necessary.

I have been playing with pointers and references but can not get them to work with an array of objects like I have.

Just pass the array of objects to the function by passing the array name as a paramater. Just like passing any other array. You can then access the objects in the array in the same way you would any array element. For example, not using your code exactly but a simplified example:

#include <iostream>

using namespace std;

class fish
{
public:
    fish();
    int getAge() {return age;}
    void setAge(int newage) { age = newage; }
private:
    int age;
};

fish::fish()
{
    age = 0;
}

void showAges(fish fishes[])
{
    cout << "fish 1 age is: " << fishes[0].getAge() << endl;
    cout << "fish 2 age is: " << fishes[1].getAge() << endl;
    cout << "fish 3 age is: " << fishes[2].getAge() << endl;
}

int main()
{
    fish myFish[3];

    showAges(myFish);
    cout << endl;

    myFish[0].setAge(10);
    myFish[1].setAge(20);
    myFish[2].setAge(30);

    showAges(myFish);

    cin.get();
    return 0;
}

Thankyou Bob, it all becomes so very clear when you have code like that to look at.
Cheers
Fishman

What if I did not know the size of the array before I started. Say i have
cout << "" How Many fish \n";
cin >>fishcoutn;
fish myFish[fishcoutn];

showAges(myFish);
cout << endl;
etc. etc etc.

How would it change the code?

>How would it change the code?
First, you would start a new thread instead of resurrecting a thread that's over a year old. Then you would use a std::vector object because arrays are error prone and difficult to use correctly.

Thread locked to avoid further bumping.

This article has been dead for over six months. Start a new discussion instead.