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

Наследование классов - C++

Восстановить пароль Регистрация
 
olimp_72
Сообщений: n/a
01.09.2011, 14:07     Наследование классов #1
Здравствуйте.
Помогите пожалуйста решить проблему по наследованию классов.

Есть базовый класс
C++
1
2
3
4
5
6
7
8
class parent
{
                protected:
                                int x;
                public:
                                void Fill() { x = 5; }
                                void Show() { cout<<x<<endl;}                                                               
};
Класс-потомок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class child : public parent
{
                public:
                                void Show_ () { cout<<x<<endl;}                                                                           
};
 
 parent parent1;
child child1;
int main()
{
                parent1.Fill();
parent1. Show();  // Выводит 5
child1. Show_();  // Выводит 0. Почему так?
return 0;
}
Спасибо.

 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2011, 14:07     Наследование классов
Посмотрите здесь:

Наследование классов C++
C++ Наследование классов.
Наследование классов C++
C++ Наследование классов
C++ Наследование Классов с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aneron
 Аватар для Aneron
157 / 156 / 12
Регистрация: 20.04.2010
Сообщений: 570
01.09.2011, 14:22     Наследование классов #2
видимо вы плохо понимаете, что из себя представляет наследование.
у вас есть две переменные parent1 и child1. и они друг между другом ни как не связаны.
pincet
 Аватар для pincet
1096 / 757 / 79
Регистрация: 23.07.2010
Сообщений: 3,795
01.09.2011, 14:24     Наследование классов #3
А кто х для child1 будет инициализировать?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.09.2011, 14:27     Наследование классов #4
pincet, переменная глобальная, поэтому все инициализируется значениями по умолчанию
Цитата Сообщение от olimp_72 Посмотреть сообщение
child1. Show_(); // Выводит 0. Почему так?
для int пол умолчанию значение - 0, оно и вывелось
pincet
 Аватар для pincet
1096 / 757 / 79
Регистрация: 23.07.2010
Сообщений: 3,795
01.09.2011, 14:34     Наследование классов #5
Цитата Сообщение от sandye51 Посмотреть сообщение
pincet, переменная глобальная, поэтому все инициализируется значениями по умолчанию
ТС больше волнует не почему 0, а почему не 5.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.09.2011, 14:40     Наследование классов #6
не 5, потому что 0, а почему 0 - объянено
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
01.09.2011, 15:32     Наследование классов #7
Цитата Сообщение от sandye51 Посмотреть сообщение
переменная глобальная, поэтому все инициализируется значениями по умолчанию
Это верно для всех глобальных объектов, кроме классов, не являющихся POD-классами, для которых вызывается конструктор по умолчанию.
У автора классы имеют защищенное поле, поэтому они не являются POD-классами, поэтому при создании их глобальных объектов будет вызван конструктор по умолчанию, в данном случае созданный компилятором, т.е. пустой, следовательно данное-член x отсутствует в его списке инициализации, следовательно останется неинициализированным
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
01.09.2011, 15:43     Наследование классов #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class a
{
    int aa;
public:
    a()
    {
        aa = 1;
    }
};
 
class b
{
    a bb;
};
 
b bb;
 
int main()
{
    return 0;
}
здесь bb.aa = 1
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
01.09.2011, 15:50     Наследование классов #9
Цитата Сообщение от sandye51 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class a
{
 int aa;
public:
 a()
 {
 aa = 1;
 }
};
class b
{
 a bb;
};
b bb;
int main()
{
 return 0;
}
здесь bb.aa = 1
так что кури
Ежели вы мне оппонируете в такой форме, то пример некорректный, так как у вас
задан конструктор по умолчанию, а у автора - нет.
Lupus
 Аватар для Lupus
22 / 22 / 1
Регистрация: 13.03.2011
Сообщений: 319
26.10.2011, 22:24     Наследование классов #10
Вопрос: можно ли наследоваться от объявленного класса, но еще не определенного (позже определенного)? И если да, то как?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 22:28     Наследование классов
Еще ссылки по теме:

C++ Наследование классов
C++ Наследование классов
Наследование классов C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.10.2011, 22:28     Наследование классов #11
Lupus, Онли шаблонной магией полагаю

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Some;
 
template<class TBase>
class Derived:public TBase
{
};
 
class Some
{
};
 
int main()
{
   Derived<Some> der;
}
Yandex
Объявления
26.10.2011, 22:28     Наследование классов
Ответ Создать тему
Опции темы

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