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

Классы (константный метод и перезагрузка оператора равно) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с треугольником http://www.cyberforum.ru/cpp-beginners/thread1023907.html
Треугольник задан координатами своих вершин. Найти периметр этого треугольника и площадь. Буду благодарен:)
C++ Определение принадлежности точки указанной области (перевести с Pascal на C++) var x,y: real; begin write('Введите значения x, y: '); readln(x,y); if ((y<0)and(y>=-2)and(x>=-1)and(x<=1)) or((y>=0)and(x>=-1)and(x<=1)and(abs(x)>=y)) then writeln('Точка попадает в заштрихованную область') else writeln('Точка не попадает в заштрихованную область'); readln; http://www.cyberforum.ru/cpp-beginners/thread1023906.html
C++ Шаблонная функция
Всем привет! Подскажите пожалуйста, почему не работает следующее объявление функции-шаблона? template <class T> class Base { T itsT; public: Base(): itsT(0) {} T getT() const {return itsT;} void setT(T age) {itsT = age;} class Temp { void func();};
Напишите программу, которая позволяет пользователю ввести число, а затем генерирует таблицу размером 20 строк на 10 столбцов C++
вот задача Решения к упражнениям, помеченным знаком *, можно найти в приложении Ж. *1. Предположим, вы хотите создать таблицу умножения на заданное число. Напишите программу, которая позволяет пользователю ввести это число, а затем генерирует таблицу размером 20 строк на 10 столбцов. Первые строки результата работы программы должны выглядеть примерно сле- дующим образом: Введите число: 7...
C++ Списки структур http://www.cyberforum.ru/cpp-beginners/thread1023898.html
#include <iostream> #include <conio.h> #include <fstream> using namespace std; struct owner { char fam; char im; char ot;
C++ Задача водопровод Помогите решить олимпиадную задачу. Второй день бьюсь и никак не могу найти нормальный рабочий алгоритм подробнее

Показать сообщение отдельно
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.12.2013, 13:34     Классы (константный метод и перезагрузка оператора равно)
Цитата Сообщение от Brain_Dead Посмотреть сообщение
a = b = c работает и с возвратом по значению (проверял)
ну тогда можно проверить (a=b)=c;
конкретно в таком порядке без возврата ссылки не обойтись, думаю. (a=b) будет lvalue только если вернёт ссылку на корректный объект

Добавлено через 26 минут
Вот пример неправильно перегруженного оператора =
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
class test{
    int* ptr;
   public:
       test()                {ptr=new int(0);}
       test(int arg)         {ptr=new int(arg);}
       test(const test& copy){ptr=new int(copy.get());}
       int get()const        {return *ptr;}
       void print_addr()const{std::cout<<"addr: "<<ptr<<std::endl; }
       /*test& operator=(const test& copy){//правильный оператор
           if (this!=&copy) *ptr=copy.get();
           return *this;
       }
       void operator=(const test& copy){//неправильный оператор, если хочешь скомпилировать a=b=c
                                                   //в остальных случаях нормально прокатит.
           if (this!=&copy) *ptr=copy.get();
       }*/
       
       test operator=(const test& copy){//проверяем такой оператор =
           if (this!=&copy) *ptr=copy.get();
           return *this;
       }
       
       ~test()               {delete ptr;}
};
int main() {
    test a(0), b(0), c(5);
    std::cout<<"operator = demo. Operator= must copy only values. Each ptr must keep pointing to individual address"<<std::endl;
    std::cout<<"a, b, c, addresses before:"<<std::endl;
    a.print_addr();
    b.print_addr();
    c.print_addr();
    (a=b)=c;
    std::cout<<"a, b, c, addresses after:"<<std::endl;
    a.print_addr();
    b.print_addr();
    c.print_addr();
    std::cout<<"addresses are OK, but..."<<std::endl;
    std::cout<<"a, b, c, values after:"<<std::endl;
    std::cout<<a.get()<<" "<<b.get()<<" "<<c.get()<<std::endl;
    std::cout<<"Expected x, y, z behaviour:"<<std::endl;
    int x=0, y=0, z=5;
    (x=y)=z;
    std::cout<<"x="<<x<<" y="<<y<<" z="<<z<<std::endl;
    return 0;
}
 
Текущее время: 03:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru