Здравствуйте, Hermes, Вы писали:
H>>>char *ch2[3];
H>>>ch2[0] = new char[8];
H>>>ch2[0] = "0000000";
H>А почему так нелься? Объясните пожалуйста!!
Можно, но не нужно
Сам приглядись к тому, что ты написал:
some_var = new_memory;
some_var = some_pointer;
в результате указатель на выделенную память потеряли.
Кстати говоря, строковый литерал имеет тип (const char)*, и присваивать его переменной типа (char)* нельзя!
Потому что через переменную можно модифицировать указываемые данные:
ch2[0][1] = '7';
Что читать:
— работа со строками в Си и С++
— выделение памяти в Си и С++
Читать нужно, поскольку это — азы, без которых можно долго ходить по граблям, методом "не компилится" — "компилится но слетает" — "не слетает но глючит" — "не глючит, но заказчик рвет волосы подмышками".
Кодт и Другой Аноним... Громадное Вам спасибо!!!
Здравствуйте, UnrealAlex
Поясните мне глупому, какая разница между
void XString::operator =(XString& xstring)
и
XString& XString::operator =(XString& xstring)
Зачем вообще необходимо возвращать какое то значение в данном случае.
Здравствуйте, ice71crew, Вы писали:
I>I>XString& XString::operator =(XString& xstring)
I>
I>Зачем вообще необходимо возвращать какое то значение в данном случае.
Общепринято в Си и Си++, что присваивание — операция, возвращающая результат, чем можно пользоваться для построения "цепочечных" присвоений:
a = b = c = 1;
Здравствуйте, ice71crew, Вы писали:
I>Поясните мне глупому, какая разница между
I>void XString::operator =(XString& xstring)
I>и
I>XString& XString::operator =(XString& xstring)
I>Зачем вообще необходимо возвращать какое то значение в данном случае.
Во-первых, параметр оператора присваивания должен быть или локальной копией, или константной ссылкой.
Иначе нельзя будет присваивать ни временные, ни константные объекты.
Тот факт, что VC игнорирует константность временного объекта, не значит, что этим можно пользоваться.
Во-вторых, зачем возвращать ссылку (на себя):
— для образования цепочки присваиваний
— для вызова методов объекта
XString a, b;
...
a = b = "hello"; // a.operator=(b.operator=("hello"))
(a = "world").makeUpper();