Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> классы в с++, пару вопросов 
:(
    Опции темы
Irokez
Дата 13.5.2005, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



вобщем я все еще учу с++
заранее прошу прощения если дублирую вопросы, которые уже задавали до меня
возникли вопросы относительно классов в с++:
1) можно ли объявлять методы внутри объявления класса?
2) зачем ставится точка с запятой после объвленя класса?
3) почему у меня не работает this в методах, компилятор говорит что класс не вызван итд?
4) можно ли как нибудь обойтись без :: - когда определяю метод вне его объявления, чтобы в случае если я поменяю название класса, то не приходилось бы много исправлять, пример:
Код

void myClass::myMethod()
{
    myClass::myVar = 5;
    myClass::print(myClass::myVar);
}

и почему в этом случае если я поставлю this, он не будет работать?
заранее спасибо
ЗЫ Просьба не закидывать ссылками на мануалы, их у меня много, а вот времени мало. если есть возможность ответить на вопрос, то буду вам очень признателен smile
PM   Вверх
FR
Дата 14.5.2005, 00:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Irokez

Код

void myClass::myMethod()
{
    this->myVar = 5;
    this->print(this->myVar);
}


Или еще проще:

Код

void myClass::myMethod()
{
    myVar = 5;
    print(myVar);
}


  Вверх
kometa_triatlon
Дата 14.5.2005, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



1) можно ли объявлять методы внутри объявления класса?

Не понял... Можно ли обьявлять методы класса в заголовочном файле? Можно smile То есть нужно.

2) зачем ставится точка с запятой после объвленя класса?

Стандарт такой smile А почему точка с запятой после каждого оператора ставится?

3) почему у меня не работает this в методах, компилятор говорит что класс не вызван итд?

Код в студию. А вообще непонятно, зачем он тебе? Просто обращаешься к переменной (то есть атрибуту) по имени, она же обьявлена внутри класса.

4) можно ли как нибудь обойтись без :: - когда определяю метод вне его объявления, чтобы в случае если я поменяю название класса, то не приходилось бы много исправлять

Нельзя. :: - оператор расширения области видимости, то есть через него ты определяешь где именно опеределена функция. А если вдруг захочешь поменять имя класса, это не проблема - тебе поможет IDE.
Значит ставишь курсор где-нибудь или в обьявлении класса или в реализации какого-то его метода. Дальше смотрим на окошко Properties - там должно несколько полей, первое - имя класса, вводишь новое имя, жмешь enter. Заменится все автоматически, правда если где-то встречается обьявление объекта класса, придется править вручную, но все же проще.


Код

void myClass::myMethod()    
{    
    myClass::myVar = 5;    
    myClass::print(myClass::myVar);    
}

А это вообще аллес какой-то... Зачем тебе применять :: , если находишься внутри класса???


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
gepard
Дата 14.5.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Цитата(Irokez @ 13.5.2005, 22:56)
4) можно ли как нибудь обойтись без :: ...

Да, просто ничего не ставь.

Код

void myClass::myMethod()    
{    
    myVar = 5;    
    print(myVar);    
}

Цитата
2) зачем ставится точка с запятой после объвленя класса?

Синтаксис такой...
Цитата
1) можно ли объявлять методы внутри объявления класса?

Я оже не понял... Всмысле, можно ли описать функцию, при описании класса? Да, можно.
Цитата
3) почему у меня не работает this в методах, компилятор говорит что класс не вызван итд?

thisсоветую использовать толдько в редких случаях, например, в перегрузки операторов, где нужен адрес объекта данного класса. В остальных случаях смотри на самый первый ответ.


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Irokez
Дата 14.5.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата(kometa_triatlon @ 14.5.2005, 02:16)
Стандарт такой smile А почему точка с запятой после каждого оператора ставится?

понятно что стандарт =)
просто после циклов или блоков т-ка с запятой не ставится, а после объявления класса - должна .. как то нелогично получается.. хотя это вопрос к страуструпу наверное ..

Цитата(kometa_triatlon @ 14.5.2005, 02:16)
Не понял... Можно ли обьявлять методы класса в заголовочном файле? Можно smile То есть нужно.

имел в виду определять методы, если да то где именно? сразу после обявление? поле всех объявлений? в своем блоке (private в private итд)?


Цитата(kometa_triatlon @ 14.5.2005, 02:16)
Значит ставишь курсор где-нибудь или в обьявлении класса или в реализации какого-то его метода. Дальше смотрим на окошко Properties - там должно несколько полей, первое - имя класса, вводишь новое имя, жмешь enter. Заменится все автоматически, правда если где-то встречается обьявление объекта класса, придется править вручную, но все же проще.

это в каком редакторе smile


Цитата(kometa_triatlon @ 14.5.2005, 02:16)
А это вообще аллес какой-то... Зачем тебе применять :: , если находишься внутри класса???

да ты прав, пришлось минут пять стирать smile
PM   Вверх
kometa_triatlon
Дата 14.5.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



Вобщем насчет точки с запятой, логика есть. Цикл и определение своего типа - вещи разные. Так что точка с запятой ставится после определения структур и классов. Это, кстати, одна из наиболее часто совершаемых ошибок smile


Цитата
мел в виду определять методы, если да то где именно? сразу после обявление? поле всех объявлений? в своем блоке (private в private итд)?


Гм. Вобщем это делается так: в заголовочном файле определяем ИНТЕРФЕЙС класса: обьявлем все переменные и методы и заодно определяем какие они будут: private, public или protected. Никакого более конкретного кода. Для методов - только названия. В *.cpp файле делаем РЕАЛИЗАЦИЮ класса: просто по порядку перебираем методы и пишем для них тела.


Цитата
это в каком редакторе

Visual studio .NET 2003. А ты в каком работаешь?


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Irokez
Дата 14.5.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



kometa_triatlon
ок понял.. значит делаю так:
1) помещаю интерфейс класса в файл например myclass.h, который не компилируется
2) помещаю реализацию класса в файл напр myclass.cpp, который я должен в итоге скомпилировать(?), при этом нужно ли из этого файла инклудить заголовочный? (#include "myclass")
3) в файле котором хочу использовать мой класс, я должен инклудить myclass.h(?) при это как должны находиться относительно друг друга заголовочный файл и файл с реализацией класса, чтобы реализация тоже нашлась?

пр:
myclass.h
Код

class myclass
{
 /*...*/
};


myclass.cpp
Код

//#include ??
/*
реализация:
myclass:: ....
*/


prog.cpp
Код

include "myclass.h";
int main()
{
    myclass A;
    return 0;
}



Цитата(kometa_triatlon @ 14.5.2005, 14:15)
Visual studio .NET 2003. А ты в каком работаешь?

DEV-CPP smile
PM   Вверх
kometa_triatlon
Дата 14.5.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



myclass.h
Код

class CMyClass    
{    
public:
int MyMethod();
};

myclass.cpp

Код

#include ".\myclass.h"

int CMyClass::MyMethod(){
return 0;
}


prog.cpp
Код

#include ".\myclass.h"

int main()    
{    
    CMyClass MyClass;    
    return MyClass.MyMethod();    
}


примерно так smile

ЗЫ. А может тебе стоит купить книжку? Это же прописные истины...


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Irokez
Дата 14.5.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата(kometa_triatlon @ 14.5.2005, 17:18)
примерно так smile

ну примерно так и я знаю smile
просто когда ты подключаешь #include ".\myclass.h" - заголовочный файл, как должен располагаться скомпиленный файл с реализацией (чтобы он был найден)? в той же директории что заголовочный файл? ведб в заголовочном файле и намека нету на файл с реализацией?
PM   Вверх
Дрон
Дата 14.5.2005, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(kometa_triatlon @ 14.5.2005, 15:15)
Вобщем насчет точки с запятой, логика есть. Цикл и определение своего типа - вещи разные. Так что точка с запятой ставится после определения структур и классов. Это, кстати, одна из наиболее часто совершаемых ошибок smile

Точка с запятой ставится так как возможна такая штука:

Код

struct Str
{
    int field;
} var;


Где var будет переменной типа myStruct smile


--------------------
Да. Именно так.
PM   Вверх
Irokez
Дата 14.5.2005, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата
Где var будет переменной типа myStruct smile

во!!! теперь объяснил! smile
PM   Вверх
kometa_triatlon
Дата 15.5.2005, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



Цитата
просто когда ты подключаешь #include ".\myclass.h" - заголовочный файл, как должен располагаться скомпиленный файл с реализацией (чтобы он был найден)? в той же директории что заголовочный файл? ведб в заголовочном файле и намека нету на файл с реализацией?

Где тебе будет удобно smile
Главное, чтобы твой проект знал, где он. Можно создать этот файл в отдельной папке, потом прописать "../myclass.h". Но лучше скидывать все в одну папку, вряд ли у тебя такой большой проект...

Да, и еще
Цитата

как должен располагаться скомпиленный файл с реализацией

Скомпиленный файл - это екзешник. В данном случае, это файл с реализацией класса. А вообще эту реализацию можно впихнуть куда угодно, лишь бы оттуда было выдно интерфейс. Хотя так тоже никто не делает.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Гость_Dender
Дата 15.5.2005, 10:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1) можно ли объявлять методы внутри объявления класса?
- Лучше там их и объявлять
2) зачем ставится точка с запятой после объвленя класса?
Для того, чтобы можно было сразу создать глобальные объекты
К примеру
CClass{
//Структура класса
}Obj1, Obj2; //Объекты класса
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.