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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
#1

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

08.03.2013, 15:26. Просмотров 2021. Ответов 11
Метки нет (Все метки)

Доброго времени суток,
Такой вопрос возник:
В заголовочном файле (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: имя, за которым следует выражение "::", должно определять класс или пространство имен

где я ошибся?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2013, 15:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение методов класса (C++):

Определение методов вне класса - C++
Определение методов вне класса используется только для того, чтобы не вносить беспорядок или есть еще какая- то причина?

Определение методов шаблонного класса - C++
Столкнулся с такой проблемой, реализовываю итератор для шаблонного списка, при определении метода интератора вылетает ошибка вот лог : ...

Определение методов шаблонного класса в файле реализации - C++
Доброго времени суток, форумчане! :) Поздравляю всех мужчин с праздником. Желаю быть мужественными, стойкими, рассудительными и...

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов - C++
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

Как вынести описание методов вложенного класса за пределы класса? - C++
Подскажите, пожалуйста, как мне вынести описание методов вложенного класса за пределы класса?

Вызов методов класса из двойного указателя на экземпляр класса - C++
Добрый день! Как можно вызвать метод класса по двойному указателя на его экземпляр? struct Point { void getPoint(){}; ...

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

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

Добавлено через 3 минуты
~OhMyGodSoLong~, и еще вопрос: нормально ли тело конструктора описывать в отдельном файле, ибо в таком случае он пишет: "+1 перегрузка"?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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;
}
При вот таком пишет?
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
}
0
Kuzia domovenok
1955 / 1808 / 140
Регистрация: 25.03.2012
Сообщений: 6,261
Записей в блоге: 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)
{}
0
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)
{}
вот тут не понял, можно поподробнее
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
08.03.2013, 22:26 #10
lowlol, ты передаёшь в конструктор переменную с таким же именем как и та что является полем класса
0
Kuzia domovenok
1955 / 1808 / 140
Регистрация: 25.03.2012
Сообщений: 6,261
Записей в блоге: 1
08.03.2013, 22:28 #11
плохо то, что ты с такой уверенностью пытаешься написать конструктор, не прочитав про него ничего.
И не только конструктор.
Ты не понимаешь, а я вот пытаюсь объяснить, что в МЕТОДы класса передавать его ПОЛЯ не нужно. Они в методы и так неявно передаются.

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

Определение методов set/get в *.h - C++
Методы доступа занимают 1-2 строчки. Можно-ли их определять сразу в *.h, или там можно только объявлять, а определять обязательно...

Определение классов и методов - C++
Доброго времени суток! Изучаю язык не долго, самостоятельно и есть проблемка - не могу понять, как определяются методы классов( в VB,...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

Вызов методов класса - C++
// practice.cpp : main project file. #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; const int...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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