Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вектор указателей на объекты класса


Автор: vlakr 31.10.2018, 11:06
Добрый день! Есть базовый класс Place и производный от него Region. Мне необходимо создать вектор, который будет хранить эти объекты. Так же нужно реализовать функцию добавления объекта и просмотр вектора. 
Код

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class Place
{
public:
    vector <Place*> MyList;
    string geographical_position;

    virtual void SetParametrs()
    {
        string GP;
        cout << "Введите географическое положение места: ";
        getline(cin, GP);
        geographical_position = GP;
    }
    void add(Place *p)
    {
        MyList.push_back(p);
    }
    virtual void show()
    {
        for (int i = 0; i < MyList.size(); i++)
        {
            cout << geographical_position;
        }
    }
    Place()
    {
        geographical_position = "not";
        cout << "Вызван конструктор без параметров для класса Place! " << endl;
    }

    Place(string GP)
    {
        cout << "Вызван конструктор с параметрами для класса Place! " << endl;
        geographical_position = GP;
    }

};
class Region : public Place
{
protected:
    string climat;
public:

    virtual void SetParametrs()
    {
        string reg;
        cout << "климат ";
        getline(cin, reg);
        climat = reg;
        string gp;
        getline(cin, gp);
        geographical_position = gp;

    }
    virtual void show()
    {
        
            for (int i = 0; i < MyList.size(); i++)
            {
                cout << Region::MyList[i] << endl;
                cout << this->geographical_position << endl;
                              //здесь я не могу вывести собственные поля этого класса

            }
    }
    Region() :Place()
    {
        cout << "Вызван конструктор без параметров для класса Region! " << endl;
    }

    Region(string CL, string GP) :Place(GP)
    {
        cout << "Вызван конструктор с параметрами для класса Region! " << endl;
        climat = CL;
    }
};

int main()
{

    setlocale(0, "Rus");
    Place n;
    Place * r = new Place();
    n.SetParametrs();
    n.add(r);
    n.show();
    \

    cout << endl;

    system("pause");
    return 0;
}

В чем ошибка? Я еще не уверена в правильности добавления объекта в вектор. Помогите разобраться

Автор: xvr 31.10.2018, 15:38
Цитата(vlakr @  31.10.2018,  11:06 Найти цитируемый пост)
В чем ошибка?

Если не считать утечки памяти (объекты по указателям в MyList не удаляются), то ошибок нет. Но общий дизайн классов весьма странный (я бы даже сказал по другому, но тут приличное место, и такие слова вслух не произносят smile )

Что вы вообще пытались сделать?

Автор: zackaz 5.11.2018, 12:16
Я заметил лишний символ в 94 строке. smile
Виртуальный метод не перегружен.
Нужен delete r; где нибудь в конце main.

Вместо
Код

for (int i = 0; i < MyList.size(); i++)
    {
        cout << this->MyList[i]->geographical_position << endl;
    }


И, действительно, в чем смысл классов? Если врубить логику список мест (vector<Place *>) должен быть в регионе. А место(Place) должно хранить одно название допустим в (std::string).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)