#include <iostream>
#include <vector>
#include <string>

class Base{
    std::vector<std::string> Names; //coloquei entre parenteses porque por algum motivo o string desaparece quando coloco da maneira correta
    public:
        void Add(std::string);
        std::string Get(int);
};
void Base::Add(std::string name){
    this->Names.push_back(name);
}
std::string Base::Get(int name_position){
    return this->Names[name_position];
}
// classe derivada
class Derived : public Base{
    public:
        void New(std::string);
};
void Derived::New(std::string name){
    Base::Add(name);
}

int main(){
    Base base;
    Derived derived;
    derived.New("joao");
    std::cout<<derived.Get(0);
    
    return 0;
}