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

ошибка с перегрузкой операции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задание на строки и символы http://www.cyberforum.ru/cpp-beginners/thread609715.html
Дана строка символов. Напечатать слова, которые начинаются и заканчиваются одной и той же буквой.
C++ Длина текста не больше 150 символов, могут быть использованы любые символы Задание: Задан текст, состоящий из слов, записанных через запятые и/или пробел, и заканчивающийся точкой. Длина текста не больше 150 символов, могут быть использованы любые символы. Словом считается последовательность символов, не содержащая пробел. Сформировать новую строку из 7-символьных слов, состоящих из латинских букв, не имеющих аналогов записи в русском языке. Найти первое цифровое... http://www.cyberforum.ru/cpp-beginners/thread609699.html
C++ Ругается на оператор strcmp
Создал базовый класс: #include <stdio.h> #include <conio.h> #include <iostream.h> #include <io.h> class Aviopolet {
vector и выбор наименьшего значения двумя соседними числами C++
Суть задачи: Считайте последовательности чисел типа double в вектор. Будем считать, что каждое значение представляет собой расстояние между двумя городами, распо- ложенными на определенном маршруте. Вычислите и выведите на печать общее расстояние (сумму всех расстояний). Найдите и выведите на печать наименьшее и наибольшее расстояние между двумя соседними городами. Найдите и выведи- те...
C++ Одномерный массив. Найти количество палиндромов. http://www.cyberforum.ru/cpp-beginners/thread609657.html
Помогите написать программу...... Найти количество тех элементов массива, которые являются палиндромами (т.е. читаются одинаково слева направо и справа налево), а также найти минимальный элемент среди тех, цифровая запись которых дает сумму, кратную трем.
C++ return и ptheread Вот код создание двух потоков... #include"stdafx.h" #include <stdio.h> #include <iostream> #include <pthread.h> #include <Windows.h> void *thread1(void*X) { for(int i=0;i<10;++i) подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.06.2012, 23:54     ошибка с перегрузкой операции
C++
1
2
3
4
5
Date d;
d.helpIncrement();
// Функция helpIncrement является методом класса. При вызове метода ему неявно передается
// указатель на объект, для которого она вызывается. В данном случае внутри метода
// this == &d;
Зря вы полную ошибку затрататорили якобы ненужной инфой. Там как раз было самое ценное.
Общее правило в с++: Если что-то в функции не должно изменятся, то это в функцию нужно передавать по константной ссылке, константному указателю или же по значению. Иначе могут быть
всякие сюрпризы вроде вашего.
В вашем случае у оператора такая сигнатура:
friend ostream &operator<<(ostream& output, Date&);
т.е. Date уходит по неконстантной ссылке. И вот что может быть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
std::ostream& operator << (std::ostream& output, Date& date);
 
void PrintDate(std::ostream& out, const Date& date)
{
   // Тут представте что кто-то захотел использовать ваш класс и он дотошно 
   // везде, где надо расставлял слово const. У него не получится заиспользовать
   // ваш оператор. Он принимает неконстантную ссылку. Тут будет ошибка компиляции
}
 
Date ReturnDate()
{
  // Это просто функция, которая возвращает Date
}
 
Date d1;
const Date d2;
 
std::cout << d1; // ok
std::cout << d2; // Ошибка компиляции. Оператору нужна неконстантная ссылка.
std::cout << ReturnDate(); // Тут тоже ошибка компиляции.
// ReturnDate() возвращает "временный объект" типа Date. А временные объекты
// нельзя передавать в функции по неконстантной ссылке. По константной можно.
 
Текущее время: 20:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru