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

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

Восстановить пароль Регистрация
 
Познающая
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 25
23.07.2013, 10:45     Оператор присваивания #1
Добрый день!
Помогите, пожалуйста, разобраться. Я не совсем понимаю работу перегруженного оператора присваивания в классе 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;
}
Я не понимаю, почему он должен возвращать вообще что-нибудь. Допустим, он изменил текущую строку, но для чего возвращать затем ссылку на нее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 10:45     Оператор присваивания
Посмотрите здесь:

Оператор присваивания C++
C++ оператор присваивания
оператор присваивания C++
Оператор присваивания. C++
Оператор присваивания в c++ C++
Перегруженный оператор присваивания C++
Оператор присваивания C++
Оператор присваивания по умолчанию C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
23.07.2013, 10:48     Оператор присваивания #2
Если он не будет возвращать значение, то не будут работать и конструкции вида
a = b = c = d;
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;
}
Yandex
Объявления
23.07.2013, 13:32     Оператор присваивания
Ответ Создать тему
Опции темы

Текущее время: 12:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru