Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 251
от 07.05.2003, 03:20

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 753
Отправлено ответов: 1644
Активность: 218.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

vitya
Статус: Профессиональный
Общий рейтинг: 108.04
[Подробней >>]
Ramzes
Статус: Опытный
Общий рейтинг: 130.54
URL: Microsoft homepage
[Подробней >>]
xiron
Статус: Доверительный
Общий рейтинг: 111.8
[Подробней >>]
 
Yuri Gordienko
Статус: Опытный
Общий рейтинг: 115.33
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 748. Всем hi! Посмотрите плиз мою программу, хотел сделать, чтобы несколько объектов в виде string можно ... (ответов: 2)
Вопрос № 749. Как я могу определить двух мерный массив с помощью new? В приложении пример, который не проходит ком... (ответов: 4)

Вопросов: 2, ответов: 6


 Вопрос № 748

Всем hi!
Посмотрите плиз мою программу, хотел сделать, чтобы несколько объектов в виде string можно было сложить. То есть string1 = string12+ string3 + string4 и так далее.
При string1 = string12+ string3 работает нормально, если слаживаю больше двух объектов, тогда вылетает.
Заранее спасибо.


Приложение:


Вопрос отправлен: 03.05.2003, 16:07
Отправитель: alexneta (alexneta@urbis.net.il)

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Здравствуйте, alexneta!
Твоя ошибка в том, что ты возвращаешь ссылку на временный объект: перепиши оператор + таком образом:
String operator + (const String & s) const;
сам оператор тоже объяви константным так как он не изменяет твой объект - а с другой стороны оптимизация.
И для полного удовольствия напиши конструцтор копирования
String(const String & str);

Ответ отправлен: 04.05.2003, 10:27
Отправитель: vitya


Отвечает Ramzes

Приветствую Вас, alexneta!
Ну естесственно...
Все потому, что вы в операторе String &String::operator +(const String &Right) определили переменную- TmpStr как static.
А как известно static переменные при повторном вызове функции не инициализируются.
Добавьте в код copy constructor и сделайте так, как показано в приложении
в этом случае при возврате из функции будет вызываться copy constructor, и все будет нормально.
пока

Приложение:

Ответ отправлен: 04.05.2003, 15:26
Отправитель: Ramzes


 Вопрос № 749

Как я могу определить двух мерный массив с помощью new?
В приложении пример, который не проходит компиляцию.
Заранее благодарю.



Приложение:


Вопрос отправлен: 03.05.2003, 19:23
Отправитель: alexneta (alexneta@urbis.net.il)

[Следующий вопрос >>] [Список вопросов]

Отвечает xiron

Добрый день, alexneta!
Делается таким образом
int **arr;
arr = new int*[ROW];
for (int i = 0; i < ROW; i++)
{
arr[i] = new int[COL];
}
Удачи

Ответ отправлен: 06.05.2003, 18:20
Отправитель: xiron


Отвечает vitya

Добрый день, alexneta!
Есть два варианта:


Приложение:

Ответ отправлен: 04.05.2003, 10:23
Отправитель: vitya


Отвечает Yuri Gordienko

Приветствую Вас, alexneta!
В языке С/С++ нет понятия двумерный массив.
Используй при задании оператора [] не int, а какой-либо тип с двумя параметрами в конструкторе, например
struct SIndex{
int x,y;
SIndex(int x1,int y1):x(x1),y(y1){}
};
class Arr
{
int& operator[](SIndex si){ /*si.x,si.y*/ }
};
int main()
{
Arr ar;
ar[SIndex(0,1)] = 10;
}
Удачи

Ответ отправлен: 04.05.2003, 11:36
Отправитель: Yuri Gordienko


Отвечает Ramzes

Здравствуйте, alexneta!
Во первых если у вас двухмерный массив, то и указатель должен быть двойным.
сдлелайте так
int** ptr; // указатель на массив указателей (строк)
ptr = new int* [Row];
for(int i = 0; i < Row; i++)
ptr[i] = new int[Col]; // инициализируем строку

Ответ отправлен: 04.05.2003, 15:30
Отправитель: Ramzes



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (37)
C / C++ (29)
Perl (7)
Delphi (14)
Pascal (26)
Basic / VBA (11)
Java / JavaScript (10)
PHP (6)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (33)
Windows NT/2000/XP (27)
"Железо" (25)
Поиск информации (12)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (9)
Юристу
Гражданское право (8)
Семейное право (4)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2003 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное