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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как подключить к проекту новый файл с функцией http://www.cyberforum.ru/cpp-beginners/thread47701.html
Есть работающий проект на C++ (dll) Хочу в Visual Studio 2008 создать в проекте отдельный файл и в этом файле создать свою функцию которую можно было бы вызывать из существующих файлов Я создал в...
C++ Выход по ESC Приветствую вас уважаемые "чатлане"! .Пишет вам "пацак". Я начал с Borland C++ 3.1. Наверное все очень просто на самом деле, но как и у всех начинающих ...Есть инструкция - вывод символа на экран и... 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 считывало необходимый код, и дописывало его... подробнее

Показать сообщение отдельно
AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73

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

19.08.2009, 13:09. Просмотров 940. Ответов 14
Метки (Все метки)

есть задача перегрузить = и + таким образом чтобы: строка1=срока2+строка3
с = проблем нет.
а вот при перегрузке + выдает ошибку при доступе к закрытым данным
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
//STRING2.H
#ifndef STRING2_H
#define STRING2_H
 
#include <iostream.h>
 
class String
{
friend String &operator+(const String &t_s2, const String &t_s3);
 
public:
       String (const char * = "");
       String (const String &);
       ~String();
       const String &operator=(const String &);
       String &operator+=(const String &);
       void setLength (int);
       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)
{
   cout<<"Constructor preobrazovaniya: "<<s<<endl;
   length=strlen(s);
   sPtr = new char[length+1];
   assert(sPtr!=0);
   strcpy(sPtr,s);
}
 
String::String (const String &copy)
{
   cout<<"Constructor copii "<<copy.sPtr<<endl;
   length=copy.length;
   sPtr = new char [length+1];
   assert (sPtr!=0);
   strcpy(sPtr, copy.sPtr);
}
String::~String()
{
    cout<<"Destructor: "<<sPtr<<endl;
    delete [] sPtr;                              
}
 
const String &String::operator=(const String &right)
{
      cout<<"Vizov operator= \n";
      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;
}
 
String &String::operator+=(const String &right)
{
       char *tempPtr = sPtr;
       length+=right.length;
       sPtr = new char[length+1];
       assert(sPtr != 0);
       strcpy(sPtr,tempPtr);
       strcat(sPtr,right.sPtr);
       delete [] tempPtr;
       
       return *this;
}
void String::setLength (int x)
{
     length=x;     
}
 
int String::getLength() const
{
    return length;
}
 
String &operator+(String &t_s2,String &t_s3)
{
       String t_s1;
       t_s1.setLength(t_s2.getLength()+t_s3.getLength()+1);
       strcpy(t_s1.sPtr,t_s2.sPtr);//!!!пишет что sPtr закрыт
       strcpy(t_s1.sPtr,t_s3.sPtr);//!!!пишет что sPtr закрыт
       return t_s1;
}
и еще вопрос, в данном случае я + перегружаю как дружественную ф-цию, а можно сделать так чтобы она была э-том класса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru