Наследование классов

Sammm

Есть базовый класс:
class people
{ 
public:
    char *name; 
};
Есть производный класс, который наследуется от базового:
class worker : public people
{ 
public: 
    char *specialization;
};
Информация сведена в таблицу:
class table_people
{
public:
    Item table[M];
    int n; //текущий размер таблицы
 
    void add_Item(int, people *);
};
 
class Item
{
public:
    int number;
    people *info;
};
Если надо добавить worker добавляю вот так:
table_people t; 
worker w; 
w.name = "Bob";
w.specialization = "cook";
t.add_Item(5, new worker(w));
 
void table_people::add_Item(int number, people * p) // передается значение worker, а принимается people
{
    table[n].number = number;
    table[n].info = p;
    ++n;
}
Как мне вывести specialization, если можно только table[n].info->name ?
1 ответ

Sammm

#include <iostream>
 
struct A
{
    int a;
    A()      : a()  {}
    A(int x) : a(x) {}
    virtual ~A()    {}
    virtual void print() const
    {
        std::cout << a << std::endl;
    }
};
 
struct B : public A
{
    int b;
    B()             : A(),  b()  {}
    B(int x, int y) : A(x), b(y) {}
    virtual void print() const
    {
        std::cout << a << ", " << b << std::endl;
    }
};
 
struct C
{
    const static int M = 10;
    A* arr[M];
    static int index;
 
    void add(A* a)
    {
        if (index < M) arr[index++] = a;
    }
    void print() const
    {
        for (int i=0; i < index; i++)
            arr[i]->print();
    }
};
 
int C::index = 0;
 
int main()
{
    C c;
    c.add(new A());
    c.add(new A(1));
    c.add(new B(1, 2));
    c.print();
    for (int i=0; i < c.index; i++)
        delete c.arr[i];
}