Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2010, 10:10   #1
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию Создание массива классов.

Совсем запутался.
Хочу создать двумерный массив из объектов какого-либо класса.
Но есть ли возможность написать конструктор именно для массива, а не одного объекта?
Я пробовал сделать так:
Код:
//Вот сам класс
class Location{
public:
    string name;
    string description;
    string map;
    
    Location(string n, string d, string m);
    Location();
};
Второй конструктор - пустой, он ничего не делает. Неинициализированные объекты нужны для перемещению по массиву
Код:
if(map[i][j]) {i++; j++;}
Ну, массив из "пустых" объектов создаётся, а вот инициализировать отдельный объект из массива не удаётся:
Код:
//Пытаюсь сделать так
map[i][j] = bedroom;
bedroom - это объект, созданный нормальным, прописанным конструктором.
Но Dev-Cpp не хочет такого принимать:
expected constructor, destructor, or type conversion before '=' token
expected `,' or `;' before '=' token

Со структурами такое вроде прокатывало, а классы не хотят. Есть ли способы сделать более элегантно и удобно то, что я описал выше?
Кипящий чайник вне форума Ответить с цитированием
Старый 26.08.2010, 10:21   #2
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Кипящий чайник
Покажи код.
the_deer_one вне форума Ответить с цитированием
Старый 26.08.2010, 10:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну методом New создавай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2010, 10:28   #4
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Кипящий чайник
У тебя конструкторы странные какие-то.

у меня вроде всё пашет:
Код:
#include<iostream>
using namespace std;

class Location{
public:
    string name;
    string description;
    string map;
    
    Location(string n, string d, string m) : name(n), description(d), map(m) 
	{}
    Location(                                   ) : name(""),  description(""), map("")
	{}		
};

int main () {
	Location  a[10];
	Location loc("bla","bla","bla");
	a[5] = loc;
	return 1;
}
the_deer_one вне форума Ответить с цитированием
Старый 26.08.2010, 11:48   #5
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию

the_deer_one Ваш код прекрасно работает, беру на вооружение, большое спасибо!
Вы не могли бы ещё подсказать, как проводить сравнение объектов одного класса? При помощи ==, например? У меня при такой попытке выскакивает вся та же ошибка.
Кипящий чайник вне форума Ответить с цитированием
Старый 26.08.2010, 12:03   #6
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
Сообщение от Кипящий чайник Посмотреть сообщение
the_deer_one Ваш код прекрасно работает, беру на вооружение, большое спасибо!
Вы не могли бы ещё подсказать, как проводить сравнение объектов одного класса? При помощи ==, например? У меня при такой попытке выскакивает вся та же ошибка.
Читай про перегрузку арифметических операций.
the_deer_one вне форума Ответить с цитированием
Старый 26.08.2010, 12:09   #7
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Перегрузи оператор ==

bool operator==(const Location &)const
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 26.08.2010, 13:10   #8
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию

Ребята! А как создать двухмерный массив из обьектов нескольких родственных классов?
Задание, конкретно, следующее: Разработать иерархию классов для представления геометрических фигур: прямая, ломанная, прямоугольник, эллипс, многоугольник. Разработать контейнер для хранения фигур.
Контейнер для хранения фигур реализовать в виде интерфейса с общими методами для всех фигур. Классы каждой из фигур должны быть реализацией данного интерфейса.
Главный код программы должен содержать создание экземпляров каждого из классов, и сохранение их в одномерном массиве типа интерфейса (коллекции фигур). Написать код работы с массивами, который проверяет работу каждого экземпляра.
ТриСемёрки вне форума Ответить с цитированием
Старый 26.08.2010, 15:35   #9
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от ТриСемёрки Посмотреть сообщение
Ребята! А как создать двухмерный массив из обьектов нескольких родственных классов?
Задание, конкретно, следующее: Разработать иерархию классов для представления геометрических фигур: прямая, ломанная, прямоугольник, эллипс, многоугольник. Разработать контейнер для хранения фигур.
Контейнер для хранения фигур реализовать в виде интерфейса с общими методами для всех фигур. Классы каждой из фигур должны быть реализацией данного интерфейса.
Главный код программы должен содержать создание экземпляров каждого из классов, и сохранение их в одномерном массиве типа интерфейса (коллекции фигур). Написать код работы с массивами, который проверяет работу каждого экземпляра.
Сейчас не буду вдаваться в создание массива продвинутого с перегрузкой [] и прочими методами, но вот основная идея:

Код:
Figure* arr = new Figure[3];
arr[0] = new Rect(...);
arr[1] = new Triangle(...);
arr[3] = new Line(...);

Вот такое вот создание, а проверка примерно такая
for (int i=0;i<3;i++)
{
arr[i].showPerimeter();
}
притом вызов showPerimeter(); приведет к тому, что покажется правильный периметр для квадрата, треугольника и линии (хотя глупповато для линии, но все тут надумано), вот, а достигается это тем, что в базовом классе фигура метод showPerimeter виртуальный....

Что искать
- присвоение указателю на базовый класс указателя на производный
- виртуальный функции
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 26.08.2010, 17:55   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от ТриСемёрки Посмотреть сообщение
Контейнер для хранения фигур реализовать в виде интерфейса с общими методами для всех фигур.
Если это дословная цитата слов преподавателя, то можете ему смело говорить, что он идиот. Реализовать в виде интерфейса невозможно.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с созданием двумерного массива из объектов производных классов Vang Общие вопросы C/C++ 15 28.05.2010 17:04
создание массива lg12 Помощь студентам 13 23.08.2009 15:13
Создание классов с использованием конструкторов различного типа Катюшенька Помощь студентам 0 30.04.2009 20:21
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
Создание иерархии классов (Delphi) Dawystrik Помощь студентам 1 22.03.2009 16:32