Форум программистов, компьютерный форум CyberForum.ru

Работа с объектом. - C++

Восстановить пароль Регистрация
 
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 03:27     Работа с объектом. #1
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct time
{
int hours;
int mituts;
}
 
class pet
{
    char name[10];
    int years_old;
}
 
class day
{
    pet dog;
    
    public:
    time today;
  
    day(int h, int m)
    {
        today.minutes = m; // 1) правильная ли инициазация структуры?
        today.hours = h;
    }
}
 
day friday;
 
// 2) правильно ли я обращаюсь к элементам структуры, находящимся в объекте:
fiday.today.minutes = 10;
 
//  3) Как инициализировать(руется) объект, находящийся внутри объекта? в моём коде это time today;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.01.2011, 03:30     Работа с объектом. #2
1, 2 - да
так как вы задатите в конструкторе внешней структуры
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 03:39  [ТС]     Работа с объектом. #3
вы наверное имели ввиду так, как задам в конструкторе внешнего класса? Получается я могу использовать лишь конструктор по-умолчанию и не могу передавать параметры?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.01.2011, 03:54     Работа с объектом. #4
FanAizu, где использовать?
тот вариант который у вас - правильный. Что не устраивает?
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 04:00  [ТС]     Работа с объектом. #5
Не устраивает вот что, если нужно создать объект класса day, то для того, чтобы присвоить значения элементам класса нужно в классе объявить конструктор по-умолчанию, если не надо передавать никаких параметров, либо если нужно, то объявить еще один конструктор, который принимает параметры, чтобы инициализировать значения элементов класса. Ну а как инициализируется объект класса pet, находящийся внутри класса day??? То есть я хочу создать объект класса day и при этом проинициализировать находящийся внутри объект класс pet.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.01.2011, 04:03     Работа с объектом. #6
Цитата Сообщение от FanAizu Посмотреть сообщение
Ну а как инициализируется объект класса pet, находящийся внутри класса day???
всякая хунта будет в полях

можно написать
day(int h = 0, int m = 0)
{
today.minutes = m; // 1) правильная ли инициазация структуры?
today.hours = h;
}

получается одновременно и с параметрами и без
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 04:12  [ТС]     Работа с объектом. #7
В представленном вами коде используются поля структуры. А мне нужно создать объект класса day внутри которого есть элемент класса pet. Так вот как объект класса pet, являющийся элементом класса day проинициализировать нужными значениями??
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.01.2011, 10:04     Работа с объектом. #8
FanAizu, ты в своем коде проинициализировал объект класса time. что тебе мешает также проинициализировать объект класса pet?
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 17:13  [ТС]     Работа с объектом. #9
Вы в ООП, извините, вообще шарите? Данные класса pet находятся в секцие private. Поэтому и придумали конструкторы, чтобы иметь доступ к защищенным данным. Если бы я создавал объект класса pet, то я бы в классе pet добавил бы конструктор по-умолчанию и конструктор, принимающий параметры. Но как мне проинициализировать объект, являющийся элементом класса??? И time это не класс, а структура.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.01.2011, 17:28     Работа с объектом. #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct time {
    int hours;
    int mituts;
}
 
class pet {
    char* name;
    int years_old;
public:
    pet(const char* Name = NULL, int Years = 0) : name(Name), years_old(Years) {}
}
 
class day {
    pet dog;
public:
    time today;
    day(int h, int m, const char* Name = NULL, int Years = 0) : today.minutes(m), 
                                                               today.hours(h), 
                                   dog(Name, Years) {}; 
};
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 17:40  [ТС]     Работа с объектом. #11
Только дочитал сегодня про наследование классов. Получается, чтобы использовать объект в качестве элемента класса нужно использовать наследование? В таком случае почему вы не объявили, что класс pet является базовым по отношению к классу day? И почему в списке инициализаторов вы используете имя объекта, а не название класса? то есть не pet(Name, Years), а dog(Name, Years) .
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.01.2011, 17:44     Работа с объектом. #12
Цитата Сообщение от FanAizu Посмотреть сообщение
Получается, чтобы использовать объект в качестве элемента класса нужно использовать наследование? В
не нужно, но так было бы лучше
Цитата Сообщение от FanAizu Посмотреть сообщение
В таком случае почему вы не объявили, что класс pet является базовым по отношению к классу day?
перечитайте свои посты, ты где нибудь упоминал о наследовании?

Цитата Сообщение от FanAizu Посмотреть сообщение
И почему в списке инициализаторов вы используете имя объекта, а не название класса? то есть не pet(Name, Years), а dog(Name, Years) .
учи мат.часть
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 17:48  [ТС]     Работа с объектом. #13
Цитата Сообщение от Maxwe11 Посмотреть сообщение
учи мат.часть
То есть? Если можно и без наследования, то используя список инициализаторов можно передать аргументы конструктору? Если их не передавать, то будет вызван конструктор по умолчанию? И будут ли доступны метода этого объекта?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.01.2011, 17:50     Работа с объектом. #14
Цитата Сообщение от FanAizu Посмотреть сообщение
Если их не передавать, то будет вызван конструктор по умолчанию?
да
Цитата Сообщение от FanAizu Посмотреть сообщение
И будут ли доступны метода этого объекта?
из вне - нет, внутри класса - да
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 17:56  [ТС]     Работа с объектом. #15
Цитата Сообщение от Maxwe11 Посмотреть сообщение

из вне - нет, внутри класса - да
то есть я не смогу, как при наследование вызвать в программе унаследованные методы, а могу только внутри класса использовать их? В этом и заключается вся разница в использование наследования и объявление объекта, как элемента класса? И еще я не понял, что вы имели ввиду под учи мат. часть? То есть не понял почему вместо имени класса вы используете имя объекта, чтобы передать конструктору параметры?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.01.2011, 18:03     Работа с объектом. #16
Цитата Сообщение от FanAizu Посмотреть сообщение
В этом и заключается вся разница в использование наследования и объявление объекта, как элемента класса?
да
Цитата Сообщение от FanAizu Посмотреть сообщение
То есть не понял почему вместо имени класса вы используете имя объекта, чтобы передать конструктору параметры?
потому что нам нужно иницилизировать конкретный объект dog, это сделано на тот случай если бы у тебя было несколько объектов petов внутри и каждый нужно было иницилизировать разными значениями
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
17.01.2011, 18:07  [ТС]     Работа с объектом. #17
ясно, значит если бы я использовал наследование, то нужно было бы указывать имя класса, а не объекта?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 18:09     Работа с объектом.
Еще ссылки по теме:

C++ Время приобретения объектом константности
Возвращение объектом значения C++
Возврат значения объектом класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.01.2011, 18:09     Работа с объектом. #18
совершенно верно
Yandex
Объявления
17.01.2011, 18:09     Работа с объектом.
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru