Re: noobs and pointers
On Apr 13, 11:59 pm, "Salt_Peter" <pj_h...@yahoo.com> wrote:
On Apr 13, 8:37 pm, "Randy" <gast...@sympatico.ca> wrote:
Hi,
I am a noob. I am trying to store Student objects pointers, in a
vector, within a School object.
In my opinion, you should be storing Students, not pointers to
Students.
Here is an example without pointers. Note the Student's copy ctor and
the effects of uncommenting the std::vector's reserve in the School's
ctor.
#include <iostream>
#include <ostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
class Student
{
int id;
std::string name;
public:
// ctors
Student() : id(0), name()
{
std::cout << "Student()\n";
}
Student(int i, std::string n) : id(i), name(n)
{
std::cout << "Student(int i, std::string n)\n";
}
// copy ctor
Student(const Student& copy)
{
std::cout << "Student(const Student& copy)\n";
id = copy.id;
name = copy.name;
}
// friend op
friend std::ostream& operator<<(std::ostream&, const Student&);
};
std::ostream& operator<<(std::ostream& os, const Student& r)
{
os << "id: " << r.id;
os << "\tname: " << r.name;
return os << std::endl;
}
class School
{
static int lastid;
std::string name;
std::vector< Student > students;
public:
// ctor
School(std::string n) : name(n), students()
{
std::cout << "School()\n";
// students.reserve(64);
}
// member functions
void add(const std::string& s)
{
students.push_back( Student(++lastid, s) );
}
// friend op
friend std::ostream& operator<<(std::ostream&, const School&);
};
int School::lastid;
std::ostream& operator<<(std::ostream& os, const School& r)
{
os << std::string(30, '-');
os << "\nschool: " << r.name;
os << "\nstudents: " << r.lastid;
os << std::endl;
std::copy( r.students.begin(),
r.students.end(),
std::ostream_iterator< Student >(os) );
os << std::string(30, '-');
return os << std::endl;
}
int main ()
{
School school("The Academy");
school.add("Alfred A");
school.add("Betty B");
school.add("Carl C");
std::cout << school;
}
/*
School()
Student(int i, std::string n)
Student(const Student& copy)
Student(int i, std::string n)
Student(const Student& copy)
Student(const Student& copy)
Student(int i, std::string n)
Student(const Student& copy)
Student(const Student& copy)
Student(const Student& copy)
------------------------------
school: The Academy
students: 3
id: 1 name: Alfred A
id: 2 name: Betty B
id: 3 name: Carl C
------------------------------
*/