#ifndef __NAMEDVECTOR_HPP__ #define __NAMEDVECTOR_HPP__ #include #include using namespace std; template class NamedVector { public: NamedVector(); NamedVector(const string & name); void setName(const string& name); const string& getName() const; void add(const T & data); void del(int index); const T& at(int index) const; void replace(int i, const T & data); int size() const; protected: string m_name; vector m_vector; }; #endif using namespace std; template NamedVector::NamedVector() { setName(string("")); } template NamedVector::NamedVector(const string & name) { setName(name); } template void NamedVector::setName(const string& name) { m_name = name; } template const string& NamedVector::getName() const { return m_name; } template void NamedVector::add(const T & data) { m_vector.push_back(data); } template void NamedVector::del(int index) { m_vector.remove(index); } template const T& NamedVector::at(int index) const { return m_vector.at(index); } template void NamedVector::replace(int i, const T & data) { m_vector.replace(i, data); } template int NamedVector::size() const { return m_vector.size(); } #ifndef __ROAD_HPP__ #define __ROAD_HPP__ #include using namespace std; class Road : public NamedVector { public: Road(const string & name); Road(); }; #endif using namespace std; Road::Road() : NamedVector() {}; Road::Road(const string & name) : NamedVector(name) {} using namespace std; int main(void) { Road *r = new Road(); r->add(20.0); delete r; return 0; }