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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Познающая
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 25
#1

Оператор присваивания - C++

23.07.2013, 10:45. Просмотров 403. Ответов 2
Метки нет (Все метки)

Добрый день!
Помогите, пожалуйста, разобраться. Я не совсем понимаю работу перегруженного оператора присваивания в классе String, который содержит переменные-члены: указатель char *itsString и переменную unsigned short itsLen (длина строки):
C++
1
2
3
4
5
6
7
8
9
10
11
12
String& String::operator=(const String & rhs)
{
    if (this == &rhs)
     return *this;
    delete [] itsString;
    itsLen=rhs.GetLen();
    itsString = new char[itsLen+1];
    for (int i=0; i<itsLen; i++)
     itsString[i] = rhs[i];
    itsString[itsLen] = '\ 0';
    return *this;
}
Я не понимаю, почему он должен возвращать вообще что-нибудь. Допустим, он изменил текущую строку, но для чего возвращать затем ссылку на нее?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 10:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор присваивания (C++):

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

оператор присваивания - C++
Подскажите пожалуйста, вот я создал класс, конструктор которого создает 2хмерный массив из 2ойного указателя, являющейся членом этого...

Оператор присваивания - C++
Почему в этом случае вызывается оператор присваивания Fraction f4; f4 = f1+f2+f3; а в другом не вызывается: ...

Оператор присваивания - C++
Какая разница между оператором &quot;=&quot; и &quot;==&quot; Почему , например , в цикле нужно писать while(count==1) а не ...

Оператор присваивания. - C++
Всем привет!В универе щас работаем с классами и перегрузками.В частности перегрузкой оператора присваивания и индексации.И я в упор не...

Оператор присваивания в c++ - C++
Такой вопрос, для каких классов следует явно перегрузить оператор присваивания??

2
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
23.07.2013, 10:48 #2
Если он не будет возвращать значение, то не будут работать и конструкции вида
a = b = c = d;
1
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
23.07.2013, 13:32 #3
Цитата Сообщение от Познающая Посмотреть сообщение
но для чего возвращать затем ссылку на нее?
функция, которая возвращает ссылку, можно использовать с левой стороны от оператора присваивания

вот небольшой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int &F(int &n)
{
    return n;
}
 
int main()
{
    int n=0;
 
    F(n)=100;       // это тоже самое, что и n=100
    std::cout << "n = " << n;   // n = 100
 
    return 0;
}
Добавлено через 8 минут
сцепленные вызовы как написал 0x10

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int &F(int &n)
{
    return n;
}
 
 
int main()
{
    int n1=0, n2=0, n3=0;
 
    F(n1)=F(n2)=F(n3)=100;
 
    std::cout << "n1 = " << n1 << std::endl;
    std::cout << "n2 = " << n2 << std::endl;
    std::cout << "n3 = " << n3 << std::endl;
 
    system("pause");
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2013, 13:32
Привет! Вот еще темы с ответами:

оператор присваивания - C++
Привет всем ! Каким образом вызывается оператор присваивания, например, здесь: a = &quot;I &quot;; если в аргументе char*, а в операторе...

Перегруженный оператор присваивания - C++
Добрый вечер! Встретил пример в книге, где есть перегруженный оператор присваивания. В итоге код который написан в книге не запускается. Во...

Оператор присваивания по умолчанию - C++
#include &lt;iostream&gt; using namespace std; class Foo { private: int var; //int var = 17; public: /*Foo&amp;...

Оператор присваивания и деструктор - C++
Вопрос: почему в 52 строке Access violation? Если убрать строку 50, все будет нормально. #include &lt;iostream&gt; using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru