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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатель на класс 
:(
    Опции темы
decembrist
  Дата 26.11.2004, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Подскажите пожалуйста! smile
Я создал класс

Цитата
class Metka
{
private:
  float curX,curY;  // текущие коорд. метки
  float X0; //начальные коорд. появления метки
  float Y0;
  //-----------------------------------------------------
  bool VisibleFlag; //флаг отображения метки на экране
public:
int timeObj;  //скорость движения метки
    Metka();
~Metka();
void DrawMetka();

};


и хочу работать с классом через указатели

Цитата
Metka* М1, М2;


Как мне обращаться к объекту класса через указатель. В частности создать класс с помощью конструктора Metka() и обращаться к функциям класса через указатель?

*М1= new Metka(); - не проходит
PM MAIL   Вверх
sergejzr
Дата 26.11.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Что-то типа такого smile
Код

Metka* M2,M3;
M2=new Metka();

Metka *M1=new Metka();
M1->DrawMetka();
cout<<M1->timeObj<<endl;



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
maxim1000
Дата 26.11.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



обращение к методам или полям класса (два варианта):
1. M1->timeObj=0;
2. (*M1).timeObj=0;
оператор new возвращает указатель на созданный класс
выражение *M1 имеет тип класса, а не указателя на класс, поэтому надо так:
M1=new Metka();



--------------------
qqq
PM WWW   Вверх
chipset
Дата 26.11.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



M1 = new Metka();
конструктор возвращает обьект на созданный обьект.
Обращение по ссылке выполняется так: M1->timeObj = 666;


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
decembrist
Дата 26.11.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Тогда у меня такой вопрос. Почему после того как я пишу

Цитата
Metka* M1,M2;

  M1 = new Metka();
  M2 = new Metka();


компилятор выдает ошибку

error C2679: binary =': no operator found which takes a right-hand operand of type 'Metka*' (or there is no acceptable conversion)
PM MAIL   Вверх
Artiom
Дата 26.11.2004, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

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



Нужно переопределить оператор =. Как это сделать было написано на форуме, воспользуйся поиском.


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
maxim1000
Дата 26.11.2004, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



для указателей не нужно переопределять оператор присваивания
дело в том, что при объявлении указателя * нужно указывать для каждой переменной smile
Metka *M1,*M2;


--------------------
qqq
PM WWW   Вверх
[ss]3L33T@
Дата 27.11.2004, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 14.10.2003
Где: Казармы

Репутация: -1
Всего: 1



decembrist
Код

Metka* M1=new Metka;

--------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 27.11.2004, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



[ss]3L33T@
Ну что? Разве это будет работать?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
chipset
Дата 27.11.2004, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



maxim1000 прав.
Для лучшей читабельности желательно писать
Код

foo *i;
//а не
foo* i;



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
bel_nikita
Дата 27.11.2004, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



chipset
Цитата
Для лучшей читабельности желательно писать
Код
foo *i;
//а не
foo* i;

Не-ееее, для лучшей читабельности, лучше так: smile
Код
foo *pa, *pb, *pc, d, e, f, *pg;




--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
decembrist
Дата 3.12.2004, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо всем! Заработало! Ошибка была в том, что я писал
Цитата
Metka* M1, M2;

а надо было, как посоветовал maxim1000
Цитата
Metka  *M1, *M2;


PM MAIL   Вверх
[ss]3L33T@
Дата 4.12.2004, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 14.10.2003
Где: Казармы

Репутация: -1
Всего: 1



decembrist
Разница лишь в том, что в первом варианте у тебя только M1 - ссылка, а во втором они оба - ссылки.
--------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@
PM MAIL WWW ICQ   Вверх
Wowa
Дата 12.1.2005, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



А какую роль играет то, что тут между * и M1 стоит пробел?
Цитата(decembrist @ 3.12.2004, 09:33)
Metka* M1, M2;


PM WWW   Вверх
gepard
Дата 12.1.2005, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Admin
Никакой.


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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