![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Irokez |
|
|||
![]() индеец ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
вобщем я все еще учу с++
заранее прошу прощения если дублирую вопросы, которые уже задавали до меня возникли вопросы относительно классов в с++: 1) можно ли объявлять методы внутри объявления класса? 2) зачем ставится точка с запятой после объвленя класса? 3) почему у меня не работает this в методах, компилятор говорит что класс не вызван итд? 4) можно ли как нибудь обойтись без :: - когда определяю метод вне его объявления, чтобы в случае если я поменяю название класса, то не приходилось бы много исправлять, пример:
и почему в этом случае если я поставлю this, он не будет работать? заранее спасибо ЗЫ Просьба не закидывать ссылками на мануалы, их у меня много, а вот времени мало. если есть возможность ответить на вопрос, то буду вам очень признателен |
|||
|
||||
| FR |
|
||||
|
Unregistered |
Irokez
Или еще проще:
|
||||
|
|||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
1) можно ли объявлять методы внутри объявления класса?
Не понял... Можно ли обьявлять методы класса в заголовочном файле? Можно 2) зачем ставится точка с запятой после объвленя класса? Стандарт такой 3) почему у меня не работает this в методах, компилятор говорит что класс не вызван итд? Код в студию. А вообще непонятно, зачем он тебе? Просто обращаешься к переменной (то есть атрибуту) по имени, она же обьявлена внутри класса. 4) можно ли как нибудь обойтись без :: - когда определяю метод вне его объявления, чтобы в случае если я поменяю название класса, то не приходилось бы много исправлять Нельзя. :: - оператор расширения области видимости, то есть через него ты определяешь где именно опеределена функция. А если вдруг захочешь поменять имя класса, это не проблема - тебе поможет IDE. Значит ставишь курсор где-нибудь или в обьявлении класса или в реализации какого-то его метода. Дальше смотрим на окошко Properties - там должно несколько полей, первое - имя класса, вводишь новое имя, жмешь enter. Заменится все автоматически, правда если где-то встречается обьявление объекта класса, придется править вручную, но все же проще.
А это вообще аллес какой-то... Зачем тебе применять :: , если находишься внутри класса??? -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| gepard |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Да, просто ничего не ставь.
Синтаксис такой...
Я оже не понял... Всмысле, можно ли описать функцию, при описании класса? Да, можно.
thisсоветую использовать толдько в редких случаях, например, в перегрузки операторов, где нужен адрес объекта данного класса. В остальных случаях смотри на самый первый ответ. -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
||||||||||
|
|||||||||||
| Irokez |
|
||||||||
![]() индеец ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
понятно что стандарт =) просто после циклов или блоков т-ка с запятой не ставится, а после объявления класса - должна .. как то нелогично получается.. хотя это вопрос к страуструпу наверное ..
имел в виду определять методы, если да то где именно? сразу после обявление? поле всех объявлений? в своем блоке (private в private итд)?
это в каком редакторе
да ты прав, пришлось минут пять стирать |
||||||||
|
|||||||||
| kometa_triatlon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Вобщем насчет точки с запятой, логика есть. Цикл и определение своего типа - вещи разные. Так что точка с запятой ставится после определения структур и классов. Это, кстати, одна из наиболее часто совершаемых ошибок
Гм. Вобщем это делается так: в заголовочном файле определяем ИНТЕРФЕЙС класса: обьявлем все переменные и методы и заодно определяем какие они будут: private, public или protected. Никакого более конкретного кода. Для методов - только названия. В *.cpp файле делаем РЕАЛИЗАЦИЮ класса: просто по порядку перебираем методы и пишем для них тела.
Visual studio .NET 2003. А ты в каком работаешь? -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
||||
|
|||||
| Irokez |
|
||||||||
![]() индеец ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
kometa_triatlon
ок понял.. значит делаю так: 1) помещаю интерфейс класса в файл например myclass.h, который не компилируется 2) помещаю реализацию класса в файл напр myclass.cpp, который я должен в итоге скомпилировать(?), при этом нужно ли из этого файла инклудить заголовочный? (#include "myclass") 3) в файле котором хочу использовать мой класс, я должен инклудить myclass.h(?) при это как должны находиться относительно друг друга заголовочный файл и файл с реализацией класса, чтобы реализация тоже нашлась? пр: myclass.h
myclass.cpp
prog.cpp
DEV-CPP |
||||||||
|
|||||||||
| kometa_triatlon |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
myclass.h
myclass.cpp
prog.cpp
примерно так ЗЫ. А может тебе стоит купить книжку? Это же прописные истины... -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
||||||
|
|||||||
| Irokez |
|
|||
![]() индеец ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
ну примерно так и я знаю просто когда ты подключаешь #include ".\myclass.h" - заголовочный файл, как должен располагаться скомпиленный файл с реализацией (чтобы он был найден)? в той же директории что заголовочный файл? ведб в заголовочном файле и намека нету на файл с реализацией? |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Точка с запятой ставится так как возможна такая штука:
Где var будет переменной типа myStruct -------------------- Да. Именно так. |
||||
|
|||||
| Irokez |
|
|||
![]() индеец ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: нет Всего: 53 |
во!!! теперь объяснил! |
|||
|
||||
| kometa_triatlon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Где тебе будет удобно Главное, чтобы твой проект знал, где он. Можно создать этот файл в отдельной папке, потом прописать "../myclass.h". Но лучше скидывать все в одну папку, вряд ли у тебя такой большой проект... Да, и еще
Скомпиленный файл - это екзешник. В данном случае, это файл с реализацией класса. А вообще эту реализацию можно впихнуть куда угодно, лишь бы оттуда было выдно интерфейс. Хотя так тоже никто не делает. -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
||||
|
|||||
| Гость_Dender |
|
|||
|
Unregistered |
1) можно ли объявлять методы внутри объявления класса?
- Лучше там их и объявлять 2) зачем ставится точка с запятой после объвленя класса? Для того, чтобы можно было сразу создать глобальные объекты К примеру CClass{ //Структура класса }Obj1, Obj2; //Объекты класса |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |