Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.06.2014, 01:04. Просмотров 1018. Ответов 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 у меня определен конструктор с одним параметром но он им почему то не пользуется.



В чем проблема??? подскажите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 01:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование классов: неудачный пример из Лафоре (C++):

Непонятен пример из Лафоре - C++
В 7й Главе Никак не могу понять как реализован выход из цикла #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

Лафоре Не компилируется пример - C++
Вот текст кода#include &quot;msoftcon.h&quot; class Shape { protected: int xCo, yCo; color fillcolor; fstyle fillstyle; ...

Пример из книги Лафоре - C++
Здравствуйте! Не могли бы подсказать, по какой причине в листинге ниже переменные должны быть обязательно быть изначально изначально с...

Пример из книги Лафоре - C++
В третьей главе книги Лафоре по с++ есть пример использующий функцию getche(): #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace...

Лафоре, преобразование классов - C++
// times1.cpp // программа перевода времени в 24-часовом написании // в 12-часовое #include &lt;iostream&gt; #include &lt;string&gt; using...

Не работает пример из книги Лафоре - C++
Доброго времени суток! Взялся решать задачу из книги Лафоре, глава 9, упр. 2. Опробовал уже готовое решение из самой книги- не работает. ...

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

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

Пример из книги Лафоре. Подсчитать количество слов и символов в строке - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; // для getche() using namespace std; int main() { setlocale(LC_ALL, &quot;Rus&quot;); int...

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Р. Лафоре "ООП в C++". Не компилируется пример с консольной графикой - C++
Изучаю C++ по книге Р. Лафоре. Дошёл до 5-ой главы, и мне встретился пример использования консольной графики. Страница 179. Пример...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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