Реализовал класс строк, и сделал оператор >> , когда ввожу строчку с пробелами , например а а. аыаыв аы, то выводит только первый символ, то бишь 'а' , попытался сделать с temp , как показано ниже
istream& operator >> (istream& in, const String &ob) {
String temp;
temp.string = ob.string;
in >> temp.string;
return in;
}
Стал выдавать ошибку malloc: *** error for object 0x10051b2c0: pointer being freed was not allocated, компилятор указывает на деструктор Вот что написал в main
int main() {
String a, b("Jaaasfg"), c ("Sb af bd");
a = b;
cout << a << endl;
a = c ;
cin >> a;
cout << a;
a = c;
cout << a;
return 0;
Вот всё описание класса:
String :: String (const char *str) {
size = strlen(str) +1;
string = new char [size];
strcpy (string, str);
}
String :: String (const String &ob) {
size = strlen(ob.string) +1;
string = new char [size];
strcpy (string, ob.string);
}
String :: ~String () { delete [] string;
}
void String :: show () {
cout << string << endl;
}
String String :: operator = (const String &ob) {
if (string)
delete [] string;
size = strlen(ob.string) + 1;
string = new char [size];
strcpy(string,ob.string);
return *this;
}
ostream& operator << (ostream& out , const String &ob) {
out << ob.string;
return out;
}
istream& operator >> (istream& in, const String &ob) {
String temp;
temp.string = ob.string;
in >> temp.string;
return in;
}
Определение класса:
#ifndef String_h
#define String_h
#include <iostream>
using namespace std;
class String {
int size;
char *string;
public:
String (const char *str = "");
String (const String &ob);
~String ();
void show ();
String operator = (const String &ob);
friend ostream& operator << (ostream& out , const String &ob);
friend istream& operator >> (istream& in, const String &ob);
};
#endif /* String_hpp */
Я оставил те части кода, где исправлены ошибки.
class String {
//...
String& operator = (const String& ob);
//...
friend istream& operator >> (istream& in, String& ob);
};
String::String(const char* str = "") {
//...
}
//...
String& String::operator = (const String& ob) {
//...
}
//...
istream& operator >> (istream& in, String& ob) {
in >> ob.string;
ob.size = strlen(ob.string) + 1;//можно без этого
//в идеале нужно выделять новую память, если вводимых символов больше
return in;
}
Чтобы долго не обяснять, сами смотрите и сравнивайте.
P.S., для символьных строк можно определить метод, возвращающий размер, и не придется хранить размер size
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
необходимо сделать фильтр для бдЕсть поля в них нужно вписать значение, которое потом должно перейти в запрос и вывести результат в tableView