Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 26
1

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

23.07.2013, 10:45. Просмотров 581. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2013, 10:45
Ответы с готовыми решениями:

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

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

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

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

2
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
23.07.2013, 10:48 2
Если он не будет возвращать значение, то не будут работать и конструкции вида
a = b = c = d;
1
55 / 55 / 6
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2013, 13:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Оператор присваивания
Какая разница между оператором &quot;=&quot; и &quot;==&quot; Почему , например , в цикле нужно писать ...

оператор присваивания
Подскажите пожалуйста, вот я создал класс, конструктор которого создает 2хмерный массив из 2ойного...

Оператор присваивания
Здравствуйте! Есть класс, в котором перегружены операции сложения и присваивания: void operator...

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

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

Перемещающий оператор присваивания
В каких ситуациях вызывается перемещающий оператор присваивания, я нашел только один. int main()...


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

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

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