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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
#1

Конструктор и скобки - C++

05.07.2013, 13:49. Просмотров 495. Ответов 9
Метки нет (Все метки)

Есть код:
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
#include <iostream>
#include <exception>
#include <istream>
#include <ostream>
 
 
class Point
{
public:
    Point () : x(0), y(0) { std::cout << "Constructor Point() called\n"; }
    Point (const int xx, const int yy) : x(xx), y(yy) { std::cout << "Constructor Point(const int, const int) called\n"; }
    int getX() { return x; }
    int getY() { return y; }
    void setX(int xx) { x = xx; }
    void setY(int yy) { y = yy; }
private:
    int x;
    int y;
};
 
 
std::istream& operator>> (std::istream& is, Point& p)
{
    int a, b;
    char t1, t2, t3; 
    is >> t1 >> a >> t2 >> b >> t3;
    
    if (t1 != '(' || t2 != ',' || t3 != ')')
    {
        is.clear(std::ios_base::failbit);
        return is;
    }
 
    p = Point(a, b);
    return is;
}
 
 
std::ostream& operator<< (std::ostream& os, Point& p)
{
    os << "(" << p.getX() << ", " << p.getY() << ")";
    return os;
}
 
 
int main()
{
    //Point a(2, 5);
    //std::cout << a << std::endl;
 
    Point b; //вот эта вот строка!
    std::cin >> b;
    std::cout << b << std::endl;
    return 0;
}
Если поставить скобки здесь: Point b(), то программа не скомпилируется и выводит ошибку
Цитата Сообщение от "Компилятор VS 2010'
error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)
Если убрать скобки, то все гуд. Компилятор VS 2010.
В чем проблема, если поставить скобки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 13:49     Конструктор и скобки
Посмотрите здесь:

Скобки - C++
Вывести все правильные скобочные выражения длиной N, состоящие из круглых и квадратных скобок. Входные данные: Входной файл INPUT.TXT...

Скобки и if else - C++
Задача такова: имеется некая &quot;база данных&quot;: int m= { 0,7,0,4,3,1, 0,3,6,3,1,2, 5,4,3,5,2,5, 1,2,5,0,5,2 }; И мне...

Скобки в языке C++ - C++
В каком случае используются фигурные скобки {...}, а в каком случае должны быть использованы фигурные скобки? Добавлено через 12 минут...

Скобки у конструктора - C++
Задавал подобный вопрос, однако следующий код все равно ставит меня в тупик. Почему такой код нормально компилируется и работает: ...

Строки и скобки в C++ - C++
Здравствуйте. Начали в колледже проходить C++. Нужно решить задачу, но никак с этим не справлюсь. в первом семестре решал точно такую же на...

Проверка на скобки - C++
Просьба помочь разобраться в мной написанной программе. Задание и код прилагаются. У меня пока 2 проблемы. 1. void Spisok(). При записи...

злые скобки - C++
Здравствуйте!!!Помогите пожалуйста написать код расстановки скобок! Задание такое: 1.Написать программу, которая расставляет...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.07.2013, 13:53     Конструктор и скобки #2
Все, что похоже на объявление функции им и является. В данном случае Point b(); является объявлением функции, а не созданием объекта.
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
05.07.2013, 13:57  [ТС]     Конструктор и скобки #3
Что-то я не понял. Это тоже похоже на функцию, но это компилится:
C++
1
2
3
4
int main()
{
    int b();
}
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.07.2013, 14:00     Конструктор и скобки #4
Объявлять функцию можно везде, где может быть размещен оператор. Ошибка компиляции у Вас не из за объявления функции внутри main, а из за попытки использовать имя функции как объект.

Вполне рабочий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main() {
   int a();
   
   std::cout << a() << std::endl;
   
   return 0;
}
 
int a() {
   return 1;
}
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
05.07.2013, 14:05  [ТС]     Конструктор и скобки #5
Ага, а почему компилятор в первом случае (с Point) определил, что Point b() это функция, в моем примере с int a() - что это переменная, а в твоем опять как функцию?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
05.07.2013, 14:07     Конструктор и скобки #6
Цитата Сообщение от Dani Посмотреть сообщение
Это тоже похоже на функцию, но это компилится:
C++
1
2
3
int b();
std::cin >> b;
std::cout << b << std::endl;
А это тоже типа компилится?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.07.2013, 14:08     Конструктор и скобки #7
Dani, с чего Вы взяли, что компилятор оценил int b(); как объявление переменной? Это тоже самое объявление функции, просто она не используется и компилятору не на что ругаться. Вот так уже будет ошибка undefined reference:
C++
1
2
3
4
5
6
7
int main() {
   int b();
   
   b();
   
   return 0;
}
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
05.07.2013, 14:12  [ТС]     Конструктор и скобки #8
ааа... получается, что просто вместо Type variable() писать Type variable чтобы вызвать конструктор по умолчанию и избежать этого расценивания компилятором как функцию, да?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.07.2013, 14:15     Конструктор и скобки #9
Ну, как бы да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 14:25     Конструктор и скобки
Еще ссылки по теме:

Квадратные скобки [] - C++
Здравствуйте! Объясните, пожалуйста, значение квадратных скобок в следующих строчках: delete contData; int&amp;...

Проверка на скобки - C++
С клавиатуры вводится строка, представляющая собой арифметическое выражение, в котором встречается несколько видов скобок - круглые,...

Задача про скобки - C++
Всем привет. Недавно показали мне такую задачу: ... намекнув на рекурсию. Кто-нибудь знает, как это решается? Спасибо :) ...

вопрос про скобки - C++
Здравствуйте, получил задание написать программу, смысл которой заключается в умножении матрицы на столбец. Матрица статическая, функция...

Удалить лишниее скобки - C++
Задано непустой текст длиной до 255 символов. Определить, является ли этот набор символов корректным математическим выражением. Учитывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
05.07.2013, 14:25     Конструктор и скобки #10
А у меня компилируется со скобками, но появляется предупреждение
C++
1
Point b();  // warning C4930: Point b(void): функция с прототипом не вызвана (предполагалось определение переменной?)
и конструктор не вызывается
Yandex
Объявления
05.07.2013, 14:25     Конструктор и скобки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru