user1797193
user1797193

Reputation:

Accessing/filling a vector from a different class?

I am confused on how to fill a vector with values from a different class.

Can anyone give me a coded example how this is done. :)

Class A
{
   //vector is here
}
Class B
{
   //add values to the vector here
}
 main()
{
  //access the vector here, and print out the values
}

I appreciate the help <3

Upvotes: 0

Views: 94

Answers (3)

Barney Szabolcs
Barney Szabolcs

Reputation: 12514

You should make your question more specific, edit it and post what you've tried to do. If you mean to do something respecting oop-rules, the play looks like this:

#include<iostream>
#include<vector>
class A{
public:
  void fill_up_the_vector() { v=std::vector<int>(3); v[0]=0; v[1]=1; v[2]=4; }
  void add( a.add(i); ) { v.push_back(i); }
  void display_last() const { std::cout<<v[v.size()-1]; }
private:
  std::vector<int> v;
};

class B{
public:
  B(){ a.fill_up_the_vector(); }  // B just *instructs* A to fill up its vector.
  void add_value(int i) { a.add(i); }
  void display() const { a.display_last(); }
private:
  A a;
};

int main()
{
  B b;
  b.add_value(9);
  b.display(); // reads v through A.
}

Note that this example above is a bit different from what you've asked. I posted it since I think you sould keep in mind that according to OOP rules

  • you don't want to access values in A directly,
  • B should have a member with type A if you plan to access a value in A,
  • you're supposed to access a value in A through B if you have filled it up from B.

The other way to go is not OOP:

struct A{
  std::vector<int> v;
};

struct B{
  static void fill_A(A& a) const { a.v = std::vector<int>(3); a.v[0]=0; a.v[1]=1; a.v[2]=4; }
};

int main()
{
  A a;
  B::fill_A(a);
  a.v.push_back(9);
  std::cout << a.v[a.v.size()-1];
}

but this code is as horrible as it gets.

Upvotes: 0

Konrad Viltersten
Konrad Viltersten

Reputation: 39148

My guess, based on the questions touch is that you're looking for the following code.

int main()
{
  ClassA[] as = {new ClassA(), new ClassA(), ... }
  ClassB[] bs = {new ClassB(), new ClassB(), ... }
}

But I'm shooting in the dark, a bit. :)

Upvotes: 0

Matt Kline
Matt Kline

Reputation: 10487

It seems like a quick lesson in access levels and encapsulation is in order.

Upvotes: 1

Related Questions