Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Новички в программировании > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 25.09.2015, 08:01   #1
Discriptor
Пользователь
 
Регистрация: 21.09.2015
Сообщений: 13
Репутация: 10
По умолчанию Возвращение объекта класса из i-го элемента массива

Доброго времени суток!

Помогите, пожалуйста, с выполнением задания лаб. работы.

Необходимо написать функцию, которая б возвращала объект класса из i-го элемента массива.
Перед этой функцией есть другая функция, которая заносит объект класса в i-й элемент массива:
Код:

void Group::PutPerson(int i, Person& map)

{

	if (i>= 0 && i < 10) p_array[i] = map;

			
}

Group - созданный класс,
Person& map - объект класса типа Karta (другого созданного класса)
p_array - указатель на динамический массив объектов

Последний раз редактировалось Discriptor; 25.09.2015 в 08:04.
Discriptor вне форума   Ответить с цитированием
Старый 25.09.2015, 09:36   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,958
Репутация: 6799
По умолчанию

Код:

Person Group::GetPerson(int i){	 return (i>= 0 && i < 10)?map:NULL;}

__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 25.09.2015, 10:40   #3
Discriptor
Пользователь
 
Регистрация: 21.09.2015
Сообщений: 13
Репутация: 10
По умолчанию

Ребята, спасибо, нашел решение:
Код:

Person& Group::GetPerson(int i) 
 {
    if ((i < 0) || (9 < i)) 
        
    return p_array[i];
}

Может кому надо)), это задание, по объектно-ориентированному программированию, лабораторная ТУСУРа.
Discriptor вне форума   Ответить с цитированием
Старый 25.09.2015, 10:53   #4
Croessmah
Вредный кошак
Профессионал
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Адрес: г. Инза
Сообщений: 1,152
Репутация: 379
По умолчанию

Тогда задам и на этом форуме тот же вопрос.
Какой толк от такого условия? Поменять одно UB на другое?
Croessmah вне форума   Ответить с цитированием
Старый 25.09.2015, 11:23   #5
Discriptor
Пользователь
 
Регистрация: 21.09.2015
Сообщений: 13
Репутация: 10
По умолчанию

ну, у меня компилятор выдал ошибку в варианте:
Код:

throw(std::out_of_range) {
    if ((i < 0) || (9 < i)) {
        throw std::out_of_range("[0,10)");
    }
    return p_array[i];

убрал использование range, ошибки исчезли. не будет работать в конечном итоге итоге, когда будет вызываться с main()?
а такой вариант будет работать?:
Код:

{
    if (i>= 0 && i < 10) 
        
    return p_array[i];
}

а такой:
Код:

Person& Group::GetPerson(int i) 
 {
    for (i= 0; i < 10; i++) 
	{
        
    return p_array[i];
	}
}

компилится без ошибок
ток, как и в первом случае, с предупреждением: warning C4715: 'Group::GetPerson' : not all control paths return a value
Ругается именно на последнею строку тела функции

Последний раз редактировалось Discriptor; 25.09.2015 в 11:32.
Discriptor вне форума   Ответить с цитированием
Старый 25.09.2015, 11:40   #6
Croessmah
Вредный кошак
Профессионал
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Адрес: г. Инза
Сообщений: 1,152
Репутация: 379
По умолчанию

Цитата:
компилится без ошибок
ток, как и в первом случае, с предупреждением: warning C4715: 'Group::GetPerson' : not all control paths return a value
Во-первых, в коде который с исключением, условие (i < 0) || (9 < i) будет true в случае "некорректного" индекса, поэтому будет сгенерировано исключение, у Вас же при таком же "некорректном" индексе получится возврат черт пойми чего.
Ну ок, рассмотрим пару случаев
Код:

Person& Group::GetPerson(int i) 
 {
    //i у нас равен 8, значит 
    if ((i < 0) || (9 < i)) //8<0 || 9<8 == false || false == false
       return p_array[i]; //Значит сюда не попадем, хотя индекс "корректный"
   //Что вернется из функции?
}

Код:

Person& Group::GetPerson(int i) 
 {
    //i у нас равен -5, значит 
    if ((i < 0) || (9 < i)) //-5<0 || 9<-5 == true || false == true
       return p_array[i]; //Значит сюда попадем и вернем ссылку на p_array[-5]
}

Нормально, да?
Но даже, если переделать условие на обратное !((i < 0) || (9 < i)), то это не даст эффекта, смотрим почему.
Код:

Person& Group::GetPerson(int i) 
 {
    //i у нас равен -5, значит 
    if (!((i < 0) || (9 < i))) //!(-5<0 || 9<-5) == !(true || false) == !(true) == false
       return p_array[i]; //Значит сюда не попадем
    //Внимание вопрос! Что вернется из функции? 
    //Вариант с исключением решал эту проблему
    //Вариант Stilet также решает проблему, если есть некое,
    //заведомо невалидное (и с соответствующим временем хранения) значение объекта Person
}

Цитата:
у меня компилятор выдал ошибку в варианте
какую и где? Что за квадратный вакуум в сферическом коне?

Последний раз редактировалось Croessmah; 25.09.2015 в 11:43.
Croessmah вне форума   Ответить с цитированием
Старый 25.09.2015, 11:51   #7
Discriptor
Пользователь
 
Регистрация: 21.09.2015
Сообщений: 13
Репутация: 10
По умолчанию

компилятор выдал 4 ошибки:
error C2653: 'std' : is not a class or namespace name
error C2146: syntax error : missing ')' before identifier 'out_of_range'
error C2146: syntax error : missing ';' before identifier 'out_of_range'
fatal error C1004: unexpected end of file found

в варианте:
Код:

Person& Group::GetPerson(int i) throw(std::out_of_range) {
    if ((i < 0) || (9 < i)) {
        throw std::out_of_range("[0,10)");
    }
    return p_array[i];
}

Discriptor вне форума   Ответить с цитированием
Старый 25.09.2015, 11:57   #8
Croessmah
Вредный кошак
Профессионал
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Адрес: г. Инза
Сообщений: 1,152
Репутация: 379
По умолчанию

Код:

#include <stdexcept>

и какой компилятор?
Croessmah вне форума   Ответить с цитированием
Старый 25.09.2015, 11:59   #9
Discriptor
Пользователь
 
Регистрация: 21.09.2015
Сообщений: 13
Репутация: 10
По умолчанию

Компилятор Microsoft Visual c++ 6.0
Discriptor вне форума   Ответить с цитированием
Старый 25.09.2015, 12:02   #10
Croessmah
Вредный кошак
Профессионал
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Адрес: г. Инза
Сообщений: 1,152
Репутация: 379
По умолчанию

Цитата:
Компилятор Microsoft Visual c++ 6.0
старый и поддерживающий не все возможности. Даже не возьмусь пилить под него код, ибо давно уже его не видел, и не помню что там он поддерживает, а что нет.

Скорее всего, у него вся стандартная библиотека валяется в глобальном пространстве, а не в std

Последний раз редактировалось Croessmah; 25.09.2015 в 12:06.
Croessmah вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение имени нажатого объекта Максим La Компоненты Delphi 3 09.07.2013 12:01
возвращение экзэипляра объекта из функции(дружественной, к примеру) monolit111 Общие вопросы C/C++ 2 06.10.2012 21:21
Инициализация элемента массива класса VmanMaslov Общие вопросы C/C++ 10 15.02.2012 20:57
роблема с созданием объекта динамического массива Класса GDA230105 C++ Builder 3 26.07.2011 09:25
Возвращение объекта из функции класса atenon Общие вопросы C/C++ 9 19.05.2010 03:24




05:30.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru