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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
#1

Наследование классов: неудачный пример из Лафоре - C++

12.06.2014, 01:04. Просмотров 937. Ответов 19
Метки нет (Все метки)

И снова всем доброй ночи . Начал читать про наследование классов и совсем запутался может быть вы мне растолкуете в чем ошибка и чего я не понял. Вот пример:

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
using namespace std;
 
class test
{
protected:
    int number;
public:
    test() :number(0)
    {
        cout << "Пустой Конструктор(test)" << endl;
    };
 
    test(int n) :number(n)
    {
        cout << "Конструктор с одним параметром(test)" << endl;
    };
 
    void display() const
    {
        cout << number << endl;
    };
 
    void operator++()
    {
        ++number;
    };
};
 
class tes :public test
{
public:
    void getzn()
    {
        cout << "Input zn: ";
        cin >> number;
    };
 
    void operator--()
    {
        --number;
    };
};
int main()
{
 
    tes t1;
    tes t2(5);
 
    t1.getzn();
    t1.display();
    t2.display();
 
return 0;
};
В учебнике написано цитата:

Создадим объект класса tes в функции main()

tes t1;

Эта строка означает, что t1 будет создан как объект класса tes и инициализирован нулем. Но в классе tes нет конструктора, каким же образом выполняется инициализация? Оказывается, что если мы не определили конструктор производного класса, то будет использоваться подходящий конструктор базового класса. В test конструктор класса tes отсутствует, и компилятор использует конструктор класса test без аргументов.

При компиляции данного примера возникает ошибка связанная вот с этим ( tes t2(5); ).


Но если я все правильно понял из того что написано в учебнике, пример должен работать т.к если обратить внимание на цитату, а именно на ту строчку которую я выделил жирным шрифтом. Мы увидим что если в наследуемом классе нет своего конструктора он обратиться к подходящему конструктору родителя. В конструкторе test у меня определен конструктор с одним параметром но он им почему то не пользуется.



В чем проблема??? подскажите пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2014, 01:44     Наследование классов: неудачный пример из Лафоре #2
Проблема в "учебнике", который нужно немедленно выбросить и заменить на толковый. А что за "учебник" такой?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2014, 02:11     Наследование классов: неудачный пример из Лафоре #3
Цитата Сообщение от dicros Посмотреть сообщение
Создадим объект класса tes в функции main()
tes t1;
Эта строка означает, что t1 будет создан как объект класса tes и инициализирован нулем. Но в классе tes нет конструктора, каким же образом выполняется инициализация? Оказывается, что если мы не определили конструктор производного класса, то будет использоваться подходящий конструктор базового класса. В test конструктор класса tes отсутствует, и компилятор использует конструктор класса test без аргументов.
Чушь какая-то написана. Если можно, название книги и страницу.
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
12.06.2014, 02:53  [ТС]     Наследование классов: неудачный пример из Лафоре #4
Р. Лафоре "Объектно-ориентированное программирование в С++" 4-е издание.

стр. 363
Renji
1877 / 1275 / 290
Регистрация: 05.06.2014
Сообщений: 3,636
12.06.2014, 03:12     Наследование классов: неудачный пример из Лафоре #5
Оказывается, что если мы не определили конструктор производного класса, то будет использоваться подходящий конструктор базового класса.
Если мы не определили конструктор производного класса, то для базового класса будет вызван конструктор по умолчанию (без аргументов). И для полей производного класса будет вызван конструктор по умолчанию. А если их нет, то ничего не скомпилируется.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2014, 03:19     Наследование классов: неудачный пример из Лафоре #6
Цитата Сообщение от dicros Посмотреть сообщение
Р. Лафоре "Объектно-ориентированное программирование в С++" 4-е издание.
стр. 363
Что тут скажешь... Можно списать на неудачный перевод.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2014, 09:34     Наследование классов: неудачный пример из Лафоре #7
Цитата Сообщение от dicros Посмотреть сообщение
Р. Лафоре "Объектно-ориентированное программирование в С++" 4-е издание.
Блин! Я так и думал. Я уже покритиковал этого «автора», но товарищ, который его мучает, написал, что конечно, но зато он «бу-бу-бу». Оказывается ни хрена не «бу-бу-бу», и бракодел в одном бракодел во всем.
Цитата Сообщение от alsav22 Посмотреть сообщение
Чушь какая-то написана.
Однако ж пишут, что эта чушь офигенно популярна среди американских студентов, причем настолько, что надо было ее четыре раза переиздавать, да еще и на русский переводить эту галиматью. Мда, дофига есть на свете, друг Горацио…
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
12.06.2014, 09:43  [ТС]     Наследование классов: неудачный пример из Лафоре #8
Mr.X, alsav22, а что посоветуете?? какой учебник скачать только чтобы он был для начинающих.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.06.2014, 10:52     Наследование классов: неудачный пример из Лафоре #9
Ради интереса решил посмотреть, что же пишет этот Лафоре. Для сравнения привожу оригинал и перевод.
Перевод в данном случае можно назвать адекватным, а вот саму идею использования "подходящего" конструктора из базового класса не стоит распространять на конструкторы с параметрами. У автора в примере указывается именно конструктор по умолчанию. Но сформулировано так, что и для других констукторов будут работать аналогичные правила, что, конечно, не соответствует действительности.
P.S. Оригинал книги издан в 2002 году, новых книг автор не писал (а жив ли он ещё?). Не знаю насколько в целом она хороша для начинающего, но учитывая некоторые неоднозначные формулировки автора и древность книги, стоит рассмотреть другие варианты. См. список литературы.
Миниатюры
Наследование классов: неудачный пример из Лафоре   Наследование классов: неудачный пример из Лафоре  
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2014, 11:28     Наследование классов: неудачный пример из Лафоре #10
Цитата Сообщение от Tulosba Посмотреть сообщение
а вот саму идею использования "подходящего" конструктора из базового класса не стоит распространять на конструкторы с параметрами.
Ну так сама идея-то бредовая, и показывает, что данный «чукча» не читатель, а писатель, т.е. сам учебников по C++ и не открывал. Что значит «использование подходящего»? Конструктор производного класса всегда вызывает конструктор базового класса. А если конструктор производного класса не определен, то он генерируется компилятором.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2014, 18:56     Наследование классов: неудачный пример из Лафоре #11
Цитата Сообщение от dicros Посмотреть сообщение
alsav22, а что посоветуете??
Советов тут может быть много, и у каждого свой. Я по Прата учил: "Язык Программирования C++. Лекции И Упражнения".
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
12.06.2014, 21:30  [ТС]     Наследование классов: неудачный пример из Лафоре #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Советов тут может быть много, и у каждого свой
Согласен я примерно так и думал, спасибо всем откликнувшимся за помощь. Все же дочитаю эту книжку надеюсь больше косяков не будет а там если что в других нужные моменты уточню.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.06.2014, 21:43     Наследование классов: неудачный пример из Лафоре #13
Цитата Сообщение от dicros Посмотреть сообщение
надеюсь больше косяков не будет
Код из "Р.Лафоре. ООП в С++"
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2014, 22:07     Наследование классов: неудачный пример из Лафоре #14
Цитата Сообщение от dicros Посмотреть сообщение
Все же дочитаю эту книжку
Безумству храбрых... Чувствуется, что вы не ищете легких путей! Взвейтесь соколы орлами!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2014, 22:21     Наследование классов: неудачный пример из Лафоре
Еще ссылки по теме:
C++ Р. Лафоре "ООП в C++". Не компилируется пример с консольной графикой
C++ Наследование классов
C++ наследование классов
C++ Наследование Классов
C++ Наследование классов

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

Или воспользуйтесь поиском по форуму:
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
12.06.2014, 22:21     Наследование классов: неудачный пример из Лафоре #15
dicros, Конечно же есть в книге пару неточностей, но именно с этой книги я начал изучение, и я остался доволен этой книгой. Так, что можно и по этой книге спокойно учить
Yandex
Объявления
12.06.2014, 22:21     Наследование классов: неудачный пример из Лафоре
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru