Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2008, 18:46   #1
Scratch
Пользователь
 
Аватар для Scratch
 
Регистрация: 25.09.2008
Сообщений: 40
По умолчанию Ссылка класса.

Что происходит если объявить ссылку класса:
Class *myClass;
Будет выделяться память или это будет просто пустая ссылка в никуда??
Scratch вне форума Ответить с цитированием
Старый 28.09.2008, 18:56   #2
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

myClass - указатель в никуда. И вообще, ссылка и указатель - разные вещи.
still_alive вне форума Ответить с цитированием
Старый 28.09.2008, 18:58   #3
Scratch
Пользователь
 
Аватар для Scratch
 
Регистрация: 25.09.2008
Сообщений: 40
По умолчанию

Цитата:
Сообщение от still_alive Посмотреть сообщение
myClass - указатель в никуда. И вообще, ссылка и указатель - разные вещи.
Если вникуда, тогда что здесь делает класс Class? Получается даже если я напишу int *myClass; то в итоге получится одно и тоже?
Scratch вне форума Ответить с цитированием
Старый 28.09.2008, 19:15   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Scratch Посмотреть сообщение
Если вникуда, тогда что здесь делает класс Class?
Это Вы сами с собой разговариваете или нас спрашиваете зачем там класс написали?
Цитата:
Сообщение от Scratch Посмотреть сообщение
Получается даже если я напишу int *myClass; то в итоге получится одно и тоже?
если вы напишите только это, то будет одно и то же.
Вообще указатель - он и в африке указатель. Что на int что на класс. Просто адрес в памяти. Тип указателю указывается для того, чтобы компилятор знал на что он должен указывать и по возможности не допускал ошибок программиста. Хотя есть нетипизированные указатели, если Вам приспичит вдруг ими воспользоваться
pu4koff вне форума Ответить с цитированием
Старый 28.09.2008, 19:48   #5
repu1sion
Пользователь
 
Регистрация: 19.09.2008
Сообщений: 14
По умолчанию

Class *myClass;
Это указатель с именем myClass на объект типа Class. Так как указателю не присвоено никакого значения, то он содержит мусор, какой-то левый адрес в памяти. Никакого объекта данного класса не создаётся. Т.е. это пустая ссылка в никуда, чтобы создать объект и данный указатель получил адрес этого объекта необходимо дописать ещё одну строчку
myClass= new Class;
В данном случае создастся объект класса Class и указатель myClass будет хранить адрес этого объекта. Через него же можно осуществлять доступ к методам и свойствам данного объекта, например myClass->x=5;
repu1sion вне форума Ответить с цитированием
Старый 28.09.2008, 20:01   #6
Scratch
Пользователь
 
Аватар для Scratch
 
Регистрация: 25.09.2008
Сообщений: 40
По умолчанию

Цитата:
Сообщение от repu1sion Посмотреть сообщение
Class *myClass;
Это указатель с именем myClass на объект типа Class. Так как указателю не присвоено никакого значения, то он содержит мусор, какой-то левый адрес в памяти. Никакого объекта данного класса не создаётся. Т.е. это пустая ссылка в никуда, чтобы создать объект и данный указатель получил адрес этого объекта необходимо дописать ещё одну строчку
myClass= new Class;
В данном случае создастся объект класса Class и указатель myClass будет хранить адрес этого объекта. Через него же можно осуществлять доступ к методам и свойствам данного объекта, например myClass->x=5;
если Class *myClass; и int *myClass; одно и тоже, то почему пишется ошибка когда я делаю так:
int *myClass = new Class;
Scratch вне форума Ответить с цитированием
Старый 28.09.2008, 20:28   #7
Eretic
Пользователь Подтвердите свой е-майл
 
Регистрация: 28.11.2007
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Scratch Посмотреть сообщение
если Class *myClass; и int *myClass; одно и тоже, то почему пишется ошибка когда я делаю так:
int *myClass = new Class;
А зачем так делать?Создавать объект указатель!Насколько я понимаю указатель-адрес.А адрес не объект.Это ссылка на объект.
Цитата:
"Если не хочешь уйти в мир теней,
Первым ударь и,коль сможешь,-убей!" - А.Пехов
Eretic вне форума Ответить с цитированием
Старый 28.09.2008, 21:08   #8
Scratch
Пользователь
 
Аватар для Scratch
 
Регистрация: 25.09.2008
Сообщений: 40
По умолчанию

Ну к примеру класс B является потомком класса А, тогда почему
так можно: A *Class= new B;
а так нельзя: B *Class= new A;
??

p.s. и вообще есть ли разница между A *Class= new B; и B *Class= new B;

Последний раз редактировалось Scratch; 28.09.2008 в 21:20.
Scratch вне форума Ответить с цитированием
Старый 28.09.2008, 21:18   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

потому что B = A + некий функционал, т.е. с объектом класса B можно работать как с объектом класса A, обратное не выполнимо
pu4koff вне форума Ответить с цитированием
Старый 28.09.2008, 21:33   #10
Scratch
Пользователь
 
Аватар для Scratch
 
Регистрация: 25.09.2008
Сообщений: 40
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
потому что B = A + некий функционал, т.е. с объектом класса B можно работать как с объектом класса A, обратное не выполнимо
Тогда вот что получается:
если A *Class; - это просто ссылка вникуда, то A здесь ничего не значит.
тем не менее в:
A*Class = new B; этот А начинает что-то значить, неувязка получается(
Scratch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ссылка в паскале vitekbest Помощь студентам 3 13.06.2008 17:50
Однаразовая ссылка Stanislav PHP 5 07.03.2008 22:03
Ссылка из программы. Kukkk Общие вопросы Delphi 1 21.09.2007 22:57
Ссылка в Label amid1804 Компоненты Delphi 3 20.05.2007 17:27