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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разные обращения к классу, В чем разница? 
:(
    Опции темы
Wowa
Дата 14.2.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


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

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



Код

class xxx {


}

xxx instanz;



и

Код

class xxx {


}

instanz new xxx();

Во втором случае, я так понимаю, что мы конструктор еще автоматом вызываем и instanz является ссылкой на класс?
Добавлено @ 14:05
А в первом случае получается, что мы создали просто переменную instanz типа xxx ?
PM WWW   Вверх
Borisff2003
Дата 14.2.2005, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
xxx instanz

Создали переменную в стеке и вызвали конструктор по умолчанию

Цитата
instanz new xxx();

Создали динамически сласс, выполнили конструктор, но вот указатель на объект мы к сожалению теряем smile
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 14.2.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Код

instanz new xxx();

А что это такое? Первый раз вижу такое определение.
Наверное
Код

xxx* instanz=new xxx();

Это имелось ввиду?


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


Эксперт
Group Icon


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

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



Цитата(sergej @ 14.2.2005, 12:15)

Это имелось ввиду?


возможно.. я взял по аналогии с ПХП.
Добавлено @ 14:18
Цитата(sergej @ 14.2.2005, 12:15)
xxx* instanz=new xxx();

тут получается intanz указателем на класс xxx? Зачем тогда добавлять сзади еще new xxx()?
Добавлено @ 14:21
Что такое INSTANZ ?
PM WWW   Вверх
Borisff2003
Дата 14.2.2005, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Зачем тогда добавлять сзади еще new xxx()?

чтоб создать класс
В принципе instanz необязательно должен указывать на класс ххх, он может быть NULL, а может и на класс ууу если ууу потомок от ххх

--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 14.2.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Instanz с немецкого - сам обьект smile

Код


//instanz1 компилятор создаст ещё при копмилировании.

xxx instanz1;

//A тут просто указатель, который пока что показывает в нирвану
//Пользоваться им мы пока ессно не можем
xxx* instanz2;
// А тут мы стали показывать на конкретный, только что созданный обьект
instanz2=new xxx();


//ещё можно сделать так:
//Ye про ссылки мы уже говорили в другой теме :)
xxx &instanz3=instanz1;



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


Эксперт
Group Icon


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

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



я могу также сделать так:
Код


xxx instanz; //Создаем объект и вызываем конструктор по-умолчанию

xxx *p; //ЧТО МЫ ДЕЛАЕМ В ЭТОЙ СТРОКЕ?

p = &instanz; // Даем указателю адрес instanz

p-> ....

Добавлено @ 14:31
sergej.z спасибо
PM WWW   Вверх
sergejzr
Дата 14.2.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Можешь smile
Цитата(Admin @ 14.2.2005, 13:28)
//ЧТО МЫ ДЕЛАЕМ В ЭТОЙ СТРОКЕ?

ничего, определяем указатель вникуда, ведь ты пока не указал, на кого ему показывать smile


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


Эксперт
Group Icon


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

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



а почему мы не можем сделать так?
Код

xxx instanz;
int *a; //вот эта строка. Почему я кое-где видел, что указатель типа INT иногда используется? Это зависит от того, какого типа переменная на адрес которой мы указываем?
a= &instanz;

PM WWW   Вверх
Borisff2003
Дата 14.2.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Код

xxx instanz;
int *a; //вот эта строка. Почему я кое-где видел, что указатель типа INT иногда используется? Это зависит от того, какого типа переменная на адрес которой мы указываем?
a= &instanz;




А ты так делать пробовал, а что компилятор говорит?smile Наскока я помню С++ язык со строгой типизацией, в отличие от PHP
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 14.2.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Потому что a это указатель на интегер, а ты его хочешь заставить указывать на xxx.

Компилер конечно всегда можно заставить делать что угодно, но зачем?

Код

xxx instanz;
int *a;
//Тут просто обманываем компилер :)
a= (int*)(&instanz);



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


Эксперт
Group Icon


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

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



ну почему же. Указатель ведь всего-лишь содержит адрес в памяти переданный ему по ссылке? Какая разница на что ссылаться? Зачем вообще нужен тип указателю, ведь тип есть у переменной, на которую ссылаемся
Добавлено @ 15:16
Цитата(Borisff2003 @ 14.2.2005, 13:09)
А ты так делать пробовал, а что компилятор говорит?

ну ясно, что будет ругаться. Поэтому я и спрашиваю, что обозначает тип, который стоит перед указателем. Это тип указателя или тип переменной на которую он ссылается?


А может ведь быть указатель на функцию?? Как быть в этом случае..
PM WWW   Вверх
sergejzr
Дата 14.2.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Цитата(Admin @ 14.2.2005, 14:12)
Зачем вообще нужен тип указателю, ведь тип есть у переменной, на которую ссылаемся

Чтобы ты не указывал в процессе программы на что попало.
Если я в С++ определил указатель на ххх, то во всей программе я буду уверен, что он показывает именно на ххх, а не на обьект какой нибудь.

Стало быть я смело могу вызывать все методы ххх.

PS:
Я переходил на Си с бэйсика.smile Меня тоже это бесило. Сейчас. когда приходится на Mickey Mouse Sprachen типа скриптов прогить, я понимаю, как был не прав. smile)



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


Эксперт
Group Icon


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

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



Цитата(sergej @ 14.2.2005, 13:20)
Если я в С++ определил указатель на ххх, то во всей программе я буду уверен, что он показывает именно на ххх, а не на обьект какой нибудь.

Ок, но:


Код

xxx instanz; //Создаем объект и вызываем конструктор по-умолчанию

xxx *p; //Тут ведь мы как раз на объект класса xxx указываем, а не на сам класс. Можно ли вообще на сам класс указывать? Запутался что-то.
p = &instanz; // Даем указателю адрес instanz

p-> ....

PM WWW   Вверх
sergejzr
Дата 14.2.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Вит давал неплохое определение классу smile)))

Класс - всего лишь рецепт, по которому компилер строит обьект

Указывать мы конечно же можем только на обьекты.

xxx *p; //тут мы не начто не указываем, просто сообщаем компилеру, что переменная р - может указывать исключительно на обьекты составленные по рецепту ххх.
Указываем мы в тот момент, когда пишем знак =.
Код


р=new xxx(); //вот тут указываем на свежесозданный обьект по рецепту ххх :)

xxx instanz; //Создаем объект и вызываем конструктор по-умолчанию

p=&instanz;//А так покаываем на обьект созданный ранее.



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0608 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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