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

Конструктор копирования и оператор присваивания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перестановка элементов крест накрест http://www.cyberforum.ru/cpp-beginners/thread398634.html
Ребята, какие есть идеи по поводу перестановки элементов массива крест накрест по блокам из 4 элементов? на данный момент я дошла до вот такого вида массива
C++ не подключается библиотека скачал Microsoft Visual C++ 2010 Express пытаюся подключить библиотеку math и возникает ошибка не удается открыть источник файл "math" http://www.cyberforum.ru/cpp-beginners/thread398599.html
C++ Ввести номер месяца и...
нужно 1) Ввести номер месяца и вывести количество дней в нем, а также число ошибок при вводе. Пример: Введите номер месяца: Введите номер месяца: -2 2 ...
error C2447 C++
Здравствуйте друзья, не получается разобраться самому в коде и прошу у вас помощи. объясните что в этом коде не так что выдает error C2447? Добавляю еще свои библиотеки в документе "bos_2.rar" ...
C++ Заходя в функцию сбрасывается адрес строки http://www.cyberforum.ru/cpp-beginners/thread398593.html
Вообщем проблема в следующем... я получаю имя файла в формате: C:\folder\text.txt Мне необходимо добавить после каждого слеша ещё один такой (C:\\folder\\text.txt) или заменить на противополоный...
C++ Почему sqrt требует тип double? Здравствуйте. Заметил, что в VS 2008 при вызове некоторых математических функций, в частности sqrt, требуется явно приводить тип к double. Допустим: int x = 16; sqrt(x); // ошибка, несоответствие... подробнее

Показать сообщение отдельно
DenisS1
0 / 0 / 0
Регистрация: 19.01.2009
Сообщений: 15

Конструктор копирования и оператор присваивания - C++

04.12.2011, 17:01. Просмотров 1561. Ответов 3
Метки (Все метки)

Не понимаю, когда используется один, а когда другой. Написал простой пример с комплексными числами - при компиляции в VS2010 и CodeBlock 10 выдаёт разный результат. Вот сам пример.
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
#include <iostream>
#include <stdlib.h>
using namespace std;
class Complex{
private:
    double re;
    double im;
public:
    Complex(){
           re=0; im=0;
    }
    Complex(double re,double im)
    {
        this->re=re;
        this->im=im;
    }
    Complex(Complex &c){
        cout << "Copy\n";
        re=c.re; im=c.im;
    }
    Complex operator=(const Complex &x){
        cout << "=\n";
        Complex c;
        c.re=x.re; c.im=x.im;
        re=x.re; im=x.im;
        return c;
    }
    Complex operator*(const Complex &x){
        Complex c;
        c.re=this->re*x.re - this->im*x.im;
        c.im=this->im*x.re + this->re*x.im;
        return c;
    }
};
 
int main(int argc, char* argv[])
{
    Complex c1(2, 3);
    Complex c2, c3;
    c3=c2=c1;
    c1=c1*c2;
    system("pause");
    return 0;
}
В VS2010 он выдаёт
=
Copy
=
Copy
Copy
=
Copy
А в CodeBlock -
=
=
=
, т.е. конструктор копирования вообще не вызывается, только оператор присваивания. Из-за чего такая разница и что больше соответствует стандарту? Помогите разобраться, а то аспирант, ведущий у нас лабы, на мой вопрос ответить не смог.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.