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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объект или метод объекта 
:(
    Опции темы
Гость_beginer
Дата 7.11.2005, 23:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем привет! В книжке Д.Либерти по С++ есть такой код
Код

#include.......
clas cat {
..........
void  Setage (int  age) { itsage=age;}
...........}
.........
int main () {
CAT a[500];
int i;
cat * p;
for (i=0 ; i<500;i++)
{
p=new cat;
p->setage(i*2+1);
a[i]=p;}
.......}


А в комментарии говорится , что каждому объекту массива присваивается значение, тогда как мне показалось , что значение получает метод объекта , а не сам объект. Может я что-нибудь не понимаю? Поясните плз.
  Вверх
BreakPointMAN
Дата 8.11.2005, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Исходник ты, конечно, перепечатал весьма криво, ну да Бог с ним.
Главное вот в чем.
Если ты пишешь так:
Код

CAT a[500]; 

то ты объявляешь массив a из 500 элементов, каждый из которых является объектом класса CAT. Так, конечно, можно писать, но - судя по коду - там должно быть нечто другое:
Код

CAT* a[500];

Если мы напишем так, то мы объявим массив a из 500 указателей на объекты класса CAT.
В таком случае все, что идет ниже по коду - вполне логично.
Код

    int i;
    // объявляем указатель p для временного хранения адреса вновь созданного объекта класса CAT
    CAT *p; 
    //  в цикле с помощью операции new создаем 500 объектов класса CAT
    for (i=0 ; i<500;i++)        {
        // создав очередной объект, присвоим его адрес (возвращенный функцией new) временному указателю
        p=new CAT;
        // далее установим с помощью метода setage значение поля itsage данного объекта
        p->setage(i*2+1);
       // a[i] - это массив указателей, запишем в очередной элемент массива адрес очередного объекта класса CAT
        a[i]=p;
        ...
       }


Это сообщение отредактировал(а) BreakPointMAN - 8.11.2005, 00:36


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Гость_beginer
Дата 8.11.2005, 10:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Блин , забыл * поставить CAT* a[500];
Но дело тут не в этом.
// далее установим с помощью метода setage значение поля itsage данного объекта
p->setage(i*2+1);
Вот и я о том же , значение присваивается полю itsage , а не самому объекту , а в книге написано ,что значение присваивается каждому элементу массива. Так какого всё-таки будет после этого значение к примеру a[1] ?
  Вверх
BreakPointMAN
Дата 8.11.2005, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Вот и я о том же , значение присваивается полю itsage , а не самому объекту , а в книге написано ,что значение присваивается каждому элементу массива. Так какого всё-таки будет после этого значение к примеру a[1] ?


Каждому элементу массива a присваивается значение - и этим значением является адрес объекта класса CAT, динамически созданного на очередной итерации.
Значением a[1] будет адрес объекта класса CAT, созданного на второй итерации, а значением поля itsage этого объекта будет 3.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Guest
Дата 8.11.2005, 11:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











"Таким образом первому объекту класса Cat присваивается значение 1 , второму 3 и т.д.В этом же цикле каждому элементу массива присваивается указатель на вновь созданный объект "
Надо было сразу напечатать. Видимо тут имелось ввиду полю объекта
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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