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

Класс присваивание a=b=c - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Runtime error: abnormal program termination на некоторых компах http://www.cyberforum.ru/cpp-beginners/thread651594.html
MS Visual Studio 2008, диалоговый проект MFC. Программа обрабатывает данные из экселевского файла (чтение/запись). На 99% компов все работает нормально (XP и Win7 различной разрядности). В проге есть 2 функции сохранения. Одна сохраняет меньше данных (что-то типа черновика), другая - больше. При обращении ко 2-й функции сохранения на 2-х компах с Win XP возникает ошибка runtime error. В окошке с...
C++ [С++] Выбор темы магистерской работы Здравствуйте! Помогите определится с интереснейшей темой для магистерской работы! То что предлагается в ВУЗе не особо по душе 1. Технология разработки встроенных программных систем и их применение в системе образования 2. Технология разработки систем реального времени и их применение в системе образования http://www.cyberforum.ru/cpp-beginners/thread651590.html
Текстовые файлы в С++ C++
Добрый день. В летнюю практику входило задание написать программу в среде visual studio c++... Но за лето, конечно, забылась большая часть всего изученного и поэтому прошу помощи у профессионалов :) В общем задание: "В программе создать текстовый файл и записать в него строки, вводимые с клавиатуры до тех пор, пока не будет введена пустая строка. Пронумеровать строки в файле и вывести...
C++ дебагер в студии 2010
'indexer.exe': Loaded 'C:\Users\shirokov_m\svn\trunk\bin\Debug\indexer.exe', Cannot find or open the PDB file 'indexer.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file 'indexer.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file 'indexer.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file...
C++ Формула в CodeBloks http://www.cyberforum.ru/cpp-beginners/thread651576.html
Хэлнапите плиз. Как мне сделать консольную программу которая бы вычисляла объем шара при имении площади?!
C++ ActiveX Хотелось бы узнать, действительно ли в связи с развитием .NET это направление пользовательских элементов управления (которые могут работать с C++) полностью похерено и никто сейчас не пишет таких контролов и взять их не откуда. подробнее

Показать сообщение отдельно
kotleta
 Аватар для kotleta
42 / 42 / 11
Регистрация: 13.09.2012
Сообщений: 196
13.09.2012, 19:09     Класс присваивание a=b=c
Собственно, вот код. Компилируется.
Но работает не так как надо.(

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class Foo
 
#include <iostream>
#include <string>
 
using namespace std;
 
{
    private:
        int *a;
        int  n;
 
    public:
        Foo(int N, int* arr) : n(N)
        {
            a = new int [n];
            for(int i=0; i < n; i++) a[i]=arr[i];
        }
 
        Foo()   {        }
 
        Foo(Foo& t)
        {
            //            cout << "[CopyC] has called!" << endl;
            this->n = t.n;
            this->a = new int [this->n];
            for(int i=0; i < this->n; i++) this->a[i]=t.a[i];
        }
 
        ~Foo()
        {
            //cout << this << " " << "deleted" << endl;
            delete [] a;
        }
 
        Foo operator = (Foo &t)
        {
            this->n = t.n;
 
            delete [] this->a;  // удаляем на случай, если в объекте до этого выделялась память
            this->a = new int [this->n];
 
            for(int i=0; i < this->n; i++) this->a[i]=t.a[i];
 
            return *this;
        }
 
        void display()
        {
            for(int i=0; i < this->n; i++)
            {
                cout << this->a[i] << endl;
            }
        }
};
 
int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int arr2[]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
 
    Foo f3;
    Foo f1(10,arr);
    Foo f2(10,arr2);
 
    f1.display();
    f2.display();
 
    f1=f3=f2;
 
 
    return 0;
}
Класс хранит динамический массив (т.е. указатель на область int, и n - количество элементов в этой области)

Насколько я помню, присваивание в С++ правоассоциативно, т.е. присваивание элементов выполняется справа налево (a=b=5) (b присваивается 5, а затем a присваивается b)

Я хочу сделать тоже самое с классами, но почему-то если оставлять Foo operator = (Foo &t), то выдается ошибка, а если Foo& operator = (Foo &t), то все прекрасно работает, непонятно почему..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru