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

не компилит простой код c++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить с заданной точностью значение функции , используя ее разложение в ряд: http://www.cyberforum.ru/cpp-beginners/thread562850.html
помогите решить пожалуйста...очень нужно
C++ помогите пожалуйста решить задачку,желательно на с++ даны три слова напечатать общии буквы ввод и вывод с файла например: мама папа бабушка, а вывести должно букву а http://www.cyberforum.ru/cpp-beginners/thread562847.html
C++ Анимация
Киньте какой нибудь пример анимационного рисунка,даже самый простой! Желательно на Dosовском С++
C++ Закрасить часть массива. нужен алгоритм решения данной пробемы
//каким способом можно закрасить только часть массива(область которая выделена красным)? что бы не весь массив был закрашен, а только часть? 5 6 4 3 7 2 8 4 9 5 4 3 3 4 3 3 4 2 4 3 3 4 7 5 4 0 3 8 3 4
C++ Даны три: слова напечатать общии буквы http://www.cyberforum.ru/cpp-beginners/thread562816.html
даны три слова напечатать общии буквы ввод и вывод с файла например: мама папа бабушка, а вывести должно букву а
C++ Является ли матрица симметричной относительно главной диагонали (templates) С помощью функции шаблона выяснить, является ли матрица симметричной относительно главной диагонали Вот мой код #include "stdafx.h" #include "iostream" #include "conio.h" using namespace std; template <typename X> подробнее

Показать сообщение отдельно
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.05.2012, 19:37     не компилит простой код c++
Конструктор копирования и оператор = для классов всегда успешно генерится, если у мемберов классов есть соответствующие конструктор\оператор и они не константные (?). у вашего point в мемберах только встроенные типы - а для них операции копирования и присваивания простые. значит все по умолчанию нормально сгенерируется и будет работать корректно.

По поводу константных ссылок: нужно здравый смысл подключать.
если в функцию передается аргумент по ссылке, то предполагается, что внутри этой функции аргумент будет изменяться. если это изменеие требуется, значит передавать нужно именно по ссылке. в случае с конструктором почти всегда не подразумевается изменение того объекта, из которого будут скопированы поля. значит его нужно отдавать по константной ссылке.

С оператором + тот же самый здравый смысл.
C++
1
2
3
4
5
6
7
8
9
point p1;
point p2;
point p3 = p2 + p3;
//В результате такого сложения p2 и p3 не изменяются ведь. значит point::operator + (const point&) const
// должен быть константным, а p3 в него должна передаваться по константной ссылке. если этого не сделать,
// то вот такой код уже не будет компилироваться:
const point p1;
const point p2;
const point p3 = p2 + p3;
Компилятор "размышляет" примерно так: если в функцию передается агрумент по ссылке, значит он там будет изменяться. Временный объекты не разрешено передавать по ссылке, потому что подумали, раз он временный, то все изменения, которые с ним могут случится в функции никому не достануться. а раз так, то лучше это дело запретить. вот и запретили. при этом не важно, изменяется там реально аргумент или нет. компилятору не всегда может заглянуть в реализацию функции, да он этого и не делает. ему достаточно лишь такого предположения на основании сигнатуры функции.

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