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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка операторов C++ 
V
    Опции темы
Redstuff
Дата 3.6.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Над объектом "строка" реализовать следующий набор операций:
+ присоединение строки в конец,
- вырезание подстроки из строки,
^ получение позиции подстроки в строке,
! переворачивание строки,
= присваивание,
>> загрузить строку из файла и ввести с консоли,
<< сохранить строку в файле и вывести на консоль.
Сделать несколько конструкторов объекта.
 

реализовать в консоли. 

Это сообщение отредактировал(а) Redstuff - 3.6.2006, 19:28


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 4.6.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Код

#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <mbstring.h>
#pragma hdrstop
#pragma argsused
class String {
  private:
  char* s;
  public:
  String& operator+(const String&) const;
};
String& String::operator+(const String& s1) const {
  char* s2 = new char[strlen(s1.s) + strlen(s) + 1];
  strcat(s2, s1, s);   // выдает сообщение об ошибке
  String newStr(s2);
  delete s2;
  return newStr;
}

int main(int argc, char* argv[]) {
  String s1="Hello";
  String s2="Goodbye";
  String s3=s1+s2;
  cout<<s3;
  getch();
}
 


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 4.6.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



PM ICQ   Вверх
Oleg_Ci
Дата 4.6.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Код

#include <stdio.h>    
#include <iostream>    
#include <conio.h>    
#include <string.h>    
#include <mbstring.h>    
//#pragma hdrstop    
//#pragma argsused

class String {    
  public:    
      char* s;        //    Public !!!
  String & operator+(const String&) const;
  String ( char *c ) { s = c ;}
  void newStr (char *c){    s = c; }
};    

String & String::operator+(const String& s1) const {    
  char* s2 = new char[strlen(s1.s) + strlen(s)];    // +1 было ??
  strcpy(s2,this->s);
  strcat(s2, s1.s);   // выдает сообщение об ошибке
  String newStr(s2);    
  //delete s2;        // ЗАЧЕМ ?
  return newStr;    
}    

int main(int argc, char* argv[]) {    
  String s1="Hello";    
  String s2="Goodbye";    
  String s3=s1+s2;    
  std::cout<<s3.s;    
  //getch();    
  std::cin.get();
  return 0;
}
 
Microsoft VS 2003 

Это сообщение отредактировал(а) Олег4 - 4.6.2006, 13:49
PM MAIL   Вверх
Redstuff
Дата 4.6.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Mal Hack спасибо за ссылку на тему, но уж больно все СЛОЖНО. Я эту тему ваще не понимаю пока. Хотелось бы пример попроще.

Добавлено @ 14:01 
Код

 #include <stdio.h>
#include <iostream.h>   // <iostream> приходится писать std::cin(cout)
#include <conio.h>    
#include <string.h>    
#include <mbstring.h>    
//#pragma hdrstop    
//#pragma argsused

class String {    
  public:
      char* s;        //    Public !!!
  String & operator+(const String&) const;
  String ( char *c ) { s = c ;}
  void newStr (char *c){    s = c; }
};    

String& String::operator+(const String& s1) const {
  char* s2 = new char[strlen(s1.s) + strlen(s)];    // +1 было ??
  strcpy(s2,this->s);
  strcat(s2, s1.s);
  String newStr(s2);
  //delete s2;        // Зачем ?
  return newStr;      // Теперь тут ошибка: Attempting to return a reference
                      // to local variable 'newStr'
}

int main(int argc, char* argv[]) {    
  String s1="Hello";    
  String s2="Goodbye";    
  String s3=s1+s2;
  cout<<s3.s;          //без std:: т.к. <iostream.h>
  //getch();
  cin.get();
  return 0;
}
 
 

Это сообщение отредактировал(а) Redstuff - 4.6.2006, 14:03


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 4.6.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Redstuff @  4.6.2006,  13:48 Найти цитируемый пост)
Mal Hack спасибо за ссылку на тему, но уж больно все СЛОЖНО.

Там есть варианты и по сложнее smile 
PM ICQ   Вверх
Oleg_Ci
  Дата 4.6.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Код

#include <vcl.h>
#include <stdio.h>
#include <iostream.h>   // <iostream> ïðèõîäèòñÿ ïèñàòü std::cin(cout)
#include <conio.h>
#include <string.h>
#include <mbstring.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused

class String2 {
  public:
  char* s;        //    Public !!!
  String2  operator+ (const String2 & s1)const;
  String2 ( char *c ) { s = c ;}
  String2  operator = ( String2 & s33 );
  ~String2(){ delete s; }
};

String2  String2::operator+(const String2 &s1)const
{

  char *s22 = new char[strlen(s1.s)+strlen(this->s)+1];// +1 ïðàâèëüíî áûëî
  strcpy(s22,this->s);
  strcat(s22, s1.s);

  String2 *newStr = new String2(s22);// с этот указатель удалить надо где-то 
  //delete s22;
  return *newStr;      // Òåïåðü òóò îøèáêà: Attempting to return a reference
                      // to local variable 'newStr'
}
String2  String2::operator= ( String2 & s33 )
{
   strcpy(s,s33.s);
   return *this;
}

int main(int argc, char* argv[]) {
  String2 s1="Hello";
  String2 s2="Goodbye";
  //s2=s1;
  String2 s3=s1+s2;
  cout<<s3.s;          //áåç std:: ò.ê. <iostream.h>
  //getch();
  cin.get();
  return 0;
}
//---------------------------------------------------------------------------

Цитата
String2 *newStr = new String2(s22);// с этот указатель удалить надо где-то

C++ Builder 6 . C указателем не пойму что делать, а так работает. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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