Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вектор указателей на объекты класса 
:(
    Опции темы
vlakr
Дата 31.10.2018, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 31.10.2018

Репутация: нет
Всего: нет



Добрый день! Есть базовый класс 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;
}

В чем ошибка? Я еще не уверена в правильности добавления объекта в вектор. Помогите разобраться
PM MAIL   Вверх
xvr
Дата 31.10.2018, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



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

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

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


Это сообщение отредактировал(а) xvr - 31.10.2018, 15:39
PM MAIL   Вверх
zackaz
Дата 5.11.2018, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.3.2008

Репутация: нет
Всего: нет



Я заметил лишний символ в 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).

Это сообщение отредактировал(а) zackaz - 5.11.2018, 12:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1354 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.