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

Определение методов класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
08.03.2013, 15:26     Определение методов класса #1
Доброго времени суток,
Такой вопрос возник:
В заголовочном файле (head.h) я объявил класс
C++
1
2
3
4
5
6
7
8
9
using namespace std;
class integer
    {
    private:
        int num;
    public:
        int division();
        integer();
    };
а в файле method.cpp мне нужно расписать тела функции division() и конструктора integer()
соответственно в файле method.cpp я пишу
C++
1
2
3
4
int integer::division()
    {
      
    }
и он ругается вот так:
1 IntelliSense: имя, за которым следует выражение "::", должно определять класс или пространство имен

где я ошибся?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.03.2013, 15:39     Определение методов класса #2
0. НИКОГДА не пишите using namespace ...; в заголовочных файлах.

1. #include "head.h" в method.cpp есть?
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
08.03.2013, 15:41  [ТС]     Определение методов класса #3
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
0. НИКОГДА не пишите using namespace ...; в заголовочных файлах.

1. #include "head.h" в method.cpp есть?
0. почему?
1.нет, сейчас попробую
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.03.2013, 15:50     Определение методов класса #4
Потому что неприятные сюрпризы. Подключаешь такой какой-нибудь хедер head.h, а потом почему-то твоя любовно написанная специальная функция copy() начинает работать совершенно по-другому, потому что кто-то сделал using в хедере и стандартная std::copy() кое-где её перекрыла, а кое-где нет.
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
08.03.2013, 15:56  [ТС]     Определение методов класса #5
спасибо, все заработало

Добавлено через 3 минуты
~OhMyGodSoLong~, и еще вопрос: нормально ли тело конструктора описывать в отдельном файле, ибо в таком случае он пишет: "+1 перегрузка"?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.03.2013, 16:42     Определение методов класса #6
Про конструктор не понял.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// head.h
class integer
{
    private:
        int num;
    public:
        integer();
};
 
// body.cpp
#include  "head.h"
 
integer::integer()
{
    num = 0;
}
При вот таком пишет?
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
08.03.2013, 16:59  [ТС]     Определение методов класса #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// head.h
class integer
{
    private:
        int num;
    public:
        integer(int num);
};
 
// body.cpp
#include  "head.h"
 
integer::integer(int num)
{
    std::cin>>num
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 17:27     Определение методов класса #8
ну нельзя не стоит так писать! Зачем тебе передавать в конструктор некий num??
Даже если б и надо было, ты только путаешь себя одинаковыми именами.
Предполагаю, что это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// head.h
class integer
{
    private:
        int num;
    public:
        integer();
};
 
// body.cpp
#include  "head.h"
 
integer::integer()
{
    std::cin>>num
}
то, что ты хотел сказать!
Но! Даже так лучше не делать. Ввод-вывод осуществляй отдельно от методов класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// head.h
class integer
{
    private:
        int num;
    public:
        integer(int);
};
 
// body.cpp
#include  "head.h"
 
integer::integer(int n): num(n)
{}
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
08.03.2013, 22:18  [ТС]     Определение методов класса #9
Kuzia domovenok, что плохого в том, что я передаю в конструктор класса метод класса?
C++
1
2
integer::integer(int n): num(n)
{}
вот тут не понял, можно поподробнее
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
08.03.2013, 22:26     Определение методов класса #10
lowlol, ты передаёшь в конструктор переменную с таким же именем как и та что является полем класса
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.03.2013, 22:28     Определение методов класса #11
плохо то, что ты с такой уверенностью пытаешься написать конструктор, не прочитав про него ничего.
И не только конструктор.
Ты не понимаешь, а я вот пытаюсь объяснить, что в МЕТОДы класса передавать его ПОЛЯ не нужно. Они в методы и так неявно передаются.

Добавлено через 1 минуту
Цитата Сообщение от Кудаив Посмотреть сообщение
lowlol, ты передаёшь в конструктор переменную с таким же именем как и та что является полем класса
он не просто передаёт переменную. Он уверен, что передаёт туда само поле класса, и также уверен, что поля класса передавать необходимо всем его функциям.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2013, 22:48     Определение методов класса
Еще ссылки по теме:

C++ Определение методов вне класса
Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов C++
Шаблоны методов класса C++

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

Или воспользуйтесь поиском по форуму:
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
08.03.2013, 22:48  [ТС]     Определение методов класса #12
Kuzia domovenok, я понимаю, что необязательно называть параметр именем поля, т.е. я мог бы написать
C++
1
2
3
4
5
6
//body.cpp
integer::integer(int k)
{
     std::cin>>k;
     return k;
}
а потом при вызове написать z=integer(num);
я не понимаю почему он в моем варианте пишет +1 перегрузка
Yandex
Объявления
08.03.2013, 22:48     Определение методов класса
Ответ Создать тему
Опции темы

Текущее время: 10:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru