Форум программистов, компьютерный форум CyberForum.ru

Перегрузка + для строк - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как подключить к проекту новый файл с функцией http://www.cyberforum.ru/cpp-beginners/thread47701.html
Есть работающий проект на C++ (dll) Хочу в Visual Studio 2008 создать в проекте отдельный файл и в этом файле создать свою функцию которую можно было бы вызывать из существующих файлов Я создал в проекте новый Пустой файл .cpp написал там свою функцию прописал в существующем файле проекта #include "noviy_fail.cpp" но при определении функции в новом фале выскакивают ошибки из существующих...
C++ Выход по ESC Приветствую вас уважаемые "чатлане"! .Пишет вам "пацак". Я начал с Borland C++ 3.1. Наверное все очень просто на самом деле, но как и у всех начинающих ...Есть инструкция - вывод символа на экран и в порт rs-232,которая зацикливается d бесконечным цикле.Внимание вопрос..- Подскажите, как сделать,чтобы программа завершалась только по нажатию клавиши ESC? void main (void) { ... http://www.cyberforum.ru/cpp-beginners/thread47691.html
C++ не могу в нём разобраться (заход 2) C++
Спасибо что помогли мне я думаю что эти задания правильно решены. Извините что я вас загружаю этими задачами но просто я не понимаю этот язык C++. Помогите ещё задачи решить. 1. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не рассматривается). Найти все пары натуральных дружественных чисел,...
трудности с CharToOem C++
есть код: char* Rus(char* text) { char* buf = new char(600); CharToOem(text, buf); strcpy(text, buf); delete buf; return text; };
C++ Как настроить GCC http://www.cyberforum.ru/cpp-beginners/thread47616.html
Надо что б по умолчанию дополнительно искал #include в нужной мне директории. Спасибо.
C++ Необходимо дописать значение в вывод текстового файла Имеется программа, которая выводит из списка кучи данных, требуемые нам данные (назовём "1.txt"). Но программу необходимо дописать так, чтоб из файла 2.txt считывало необходимый код, и дописывало его в 1.txt. Вот рабочая прога, которая выводит 1.txt: #include<stdio.h> int main(void) { FILE *in, *out; char tmp, tmp1, tmp2, ichfil, infits, iobalv; int iutano, iutmes, iutdia, iexps; подробнее

Показать сообщение отдельно
AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73
19.08.2009, 15:41  [ТС]     Перегрузка + для строк
переделал перегрузку +
C++
1
2
3
4
5
6
7
8
9
10
String &operator+(const String &t_s2, const String &t_s3)
{
       String t_s1;
       delete [] t_s1.sPtr;
       t_s1.length=t_s2.length+t_s3.length+1;
       t_s1.sPtr = new char[t_s1.length];
       strcpy(t_s1.sPtr,t_s2.sPtr);
       strcat(t_s1.sPtr,t_s3.sPtr);
       return t_s1;//результат нормальный s2+s3!!!
}
return t_s1; - возвращает нормальную сцепленную строку
а вот при присваивании выходят каракули s1=s2+s3 => абракадабра

ничего не могу понять, перегрузка = в других примерах работала нормально(((((((((

Добавлено через 1 минуту 59 секунд
ссылку на локальную переменную разве можно возвращать?
я в этом не силен, но судя по примерам, которые я читал при решении данной задачи, от можно , посмотри еще тут строка с 96 по 119 в первой месагеПерегрузка оператора +

Добавлено через 9 минут 10 секунд
вот привожу окончательный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//STRING2.H
#ifndef STRING2_H
#define STRING2_H
 
#include <iostream.h>
 
class String
{
friend String &operator+(const String &t_s2, const String &t_s3);
friend ostream &operator<<(ostream &, const String &);
friend istream &operator>>(istream &, String &);
public:
       String (const char * = "");
       String (const String &);
       ~String();
       const String &operator=(const String &);
       int getLength () const;
private:      
       char *sPtr;
       int length;       
};
 
#endif
 
//STRING2.CPP
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <assert.h>
#include "string2.h"
 
String::String (const char *s)
{
   length=strlen(s);
   sPtr = new char[length+1];
   assert(sPtr!=0);
   strcpy(sPtr,s);
}
 
String::String (const String &copy)
{
   length=copy.length;
   sPtr = new char [length+1];
   assert (sPtr!=0);
   strcpy(sPtr, copy.sPtr);
}
String::~String()
{
    delete [] sPtr;                              
}
 
const String &String::operator=(const String &right)
{
      if (&right != this)
      {
         delete [] sPtr;
         length=right.length;
         sPtr = new char [length+1];
         assert (sPtr != 0);
         strcpy(sPtr,right.sPtr);
      }      
      else
      {
          cout<<"Popitka samoprisvaivaniya String\n";    
      }
      return *this;
}
 
int String::getLength() const
{
    return length;
}
 
String &operator+(const String &t_s2, const String &t_s3)
{
       String t_s1;
       delete [] t_s1.sPtr;
       t_s1.length=t_s2.length+t_s3.length+1;
       t_s1.sPtr = new char[t_s1.length];
       strcpy(t_s1.sPtr,t_s2.sPtr);
       strcat(t_s1.sPtr,t_s3.sPtr);
       cout<<"t_s1.sPtr after all = "<<t_s1.sPtr<<endl;
       return t_s1;
}
 
ostream &operator<<(ostream &output, const String &s)
{
    output<<s.sPtr;
    return output;        
}
 
istream &operator>>(istream &input, String &s)
{
    char temp[100];
    input>>setw(100)>>temp;
    s=temp;
    return input;        
}
 
//8.5
#include <iostream.h>
#include "string2.h"
int main()
{
char ch='y';
    
    do{
        String s1, s2("Fuck "),s3("you!");
        
        s1=s2+s3;
        cout<<s1<<endl;
        
        
        cout<<"\n\nContinue y/n? "<<endl;
        cin>>ch;
     }while (ch=='y');
     return 0;
}
присваивает s1 не s2+s3, а какой-то бред,
скоро крыша рухнет, не могу понять гле бок((((((((((
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru