Страница 1 из 1
перегрузка оператора С++
Добавлено: 17 апр 2010, 20:05
tanyabars
Задача. Создать несколько объектов (например а и b ) разработанного класса. Класс - символьная строка. Реализовать для объектов данного класса перегрузку операции -=(b-=а). Содержимое объектов (а, b, их строк) до и после выполнения операции, вывести на экран.
Проверьте пожалуйста код программы и помогите исправить ошибки.
Код: Выделить всё
#include <iostream>
#include <cstdio>
#include "string.h"
using namespace std;
class String
{
private:
char str[100];
public:
String();
String(char *s);
String(const String &);
~String();
String operator-=(String op);
void input();
void see();
};
String::String()
{
strcpy(str,"");
}
String::String(char *s)
{
strcpy(str,s);
}
String::String(const String &a)
{
strcpy(str,a.str);
}
String::~String()
{
//if(str) delete [] str;
}
String String:: operator-=(String op)
{
str=op.str-str;
return *this;
}
void String::see()
{
cout<<"new string: "<<str<<endl;
}
void String::input()
{
cout << "Enter String: ";
gets(str);
}
int main()
{
String a,b;
a.input();
b.input();
b-=a;
b.see();
return 0;
}
Re: перегрузка оператора С++
Добавлено: 17 апр 2010, 22:22
Romeo
Применение оператора "-" к поинтерам даст арифметическую разность адресов, что не будет в свою очередь валидным адресом. Таким образом, ошибочное место вот оно:
Для того, чтобы понять каким образом следует исправить код нам нужно услышать от тебя каким образом по условию задачи должен себя вести оператор -=. Как только мы это выясним, сразу же укажем правильный фикс.
Re: перегрузка оператора С++
Добавлено: 17 апр 2010, 22:29
tanyabars
в задаче сказано, что для объектов данного класса реализовать перегрузку операции -= (b-=а)
Re: перегрузка оператора С++
Добавлено: 17 апр 2010, 22:45
Romeo
Очень информативно
Ну реализуй операцию пустой. А если не понравится преподавателю, то скажи, что в спецификации сказано реализовать, но как именно реализовать не сказано. Таким образом все условия выполнены и если ему что-то не нравится, то пускай правит функциональную спецификацию

Re: перегрузка оператора С++
Добавлено: 20 апр 2010, 00:01
tanyabars
b-=a, т.е b=b-a от одной строки отнять другую
Re: перегрузка оператора С++
Добавлено: 20 апр 2010, 13:13
rrrFer
b-=a, т.е b=b-a от одной строки отнять другую
пример напишите
Re: перегрузка оператора С++
Добавлено: 20 апр 2010, 13:35
tanyabars
b= "happy birthday"
a="birthday"
b=b-a т.е happy = happy birthday - birthday
Re: перегрузка оператора С++
Добавлено: 20 апр 2010, 19:23
rrrFer
Код: Выделить всё
String String:: operator-=(String op){
int i;
for(i=0;*(this->str)==op.str[i]&&*(this->str)&&op.str[i];i++){
this->str++;
}
return *this;
}
как то так наверно, и ИМХО лучше передавать в функцию указатель или ссылку на обьект.
и еще this->str++; возможно если str будет указателем,т.е. надо обьявить char *str; и в конструкторе выделять память, в деструкторе нужно выполнить delete
Re: перегрузка оператора С++
Добавлено: 20 апр 2010, 19:57
tanyabars
я исправила код, но выдаёт ошибки
Код: Выделить всё
#include <iostream>
#include <cstdio>
#include "string.h"
using namespace std;
class String
{
private:
char *str;
public:
String();
String(char *s);
String(const String &);
~String();
String operator-=(String op);
void input();
void see();
};
String::String()
{
strcpy(str,"");
}
String::String(char *s)
{
strcpy(str,s);
}
String::String(const String &a)
{
strcpy(str,a.str);
}
String::~String()
{
if(str) delete [] str;
}
String String:: operator-=(String op){
int i;
for(i=0;*(this->str)==op.str[i]&&*(this->str)&&op.str[i];i++){
this->str++;
}
return *this;
void String::see()
{
cout<<"new string: "<<str<<endl;
}
void String::input()
{
cout << "Enter String: ";
gets(str);
}
int main()
{
String a,b;
a.input();
b.input();
b-=a;
b.see();
return 0;
}
}
Re: перегрузка оператора С++
Добавлено: 22 апр 2010, 13:00
BBB
Описание перегружаемого оператора должно быть:
Т.е., в частности, тип результата - не объект, а ссылка на объект