Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831

Наследование

06.08.2015, 18:01. Показов 1646. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Ребята, почему в данном примере
Кликните здесь для просмотра всего текста
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
56
57
58
59
60
61
#include <iostream>
using namespace std;
 
//---------------------------------------------------------------------------//
//Определение класса Counter
//---------------------------------------------------------------------------//
class Counter{
    protected:
        unsigned int count;
    public:
        Counter() : count(0)
        {}
        Counter(int c) : count(c)
        {}
        unsigned int getCount() const{
            return count;
        }
        Counter operator ++(){
            return Counter(++count);
        }
};
//---------------------------------------------------------------------------//
//Определение класса CountDn, наследуемого от класса Counter
//---------------------------------------------------------------------------//
class CountDn : public Counter{
    public:
        CountDn() : Counter()
        {}
        CountDn(int c) : Counter(c)
        {}
        CountDn operator --(){
            return CountDn(--count);
        }
};
//---------------------------------------------------------------------------//
//Определение класса
//---------------------------------------------------------------------------//
class PCount : public CountDn{
    public:
        PCount() : CountDn()
        {}
        PCount(int c) : CountDn(c)
        {}
        PCount operator ++(int){
            return PCount(count++);
        }
        PCount operator --(int){
            return PCount(count--);
        }
};
 
int main(){
    PCount p(0);
 
    ++p;
 
    cout << p.getCount() << endl;
 
    system("PAUSE");
    return 0;
}


Не могу использовать префиксную операцию ++?

Добавлено через 1 минуту
Вот, что пишет компилятор:
error C2675: унарный '++': 'PCount' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2015, 18:01
Ответы с готовыми решениями:

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

Наследование
int main() { setlocale(LC_ALL, &quot;RUS&quot;); Stud FIRST_TRY; FIRST_TRY.set(); exam(FIRST_TRY); FIRST_TRY.get(); ...

Наследование
Реализовать наследование классов квартиры,этаж,подъезд,дом

30
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2015, 18:47
Студворк — интернет-сервис помощи студентам
hoggy, в классах при такой ситуации происходит ошибка компиляции

Добавлено через 2 минуты
castaway, да откуда мне знать, что в структурах происходит иначе???????
Дейтел про ситуацию со структурами в своей книге не рассказывал, так что, это не ко мне притензии, а я говорю лишь то, о чем читал.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.08.2015, 18:48
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
в классах при такой ситуации происходит ошибка компиляции
показывайте свою "ситуацию".

и так, на всякий случай:
классы от структур ничем не отличаются,
кроме инвертированного модификатора доступа.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2015, 18:49
hoggy, а почему тогда дейтел в книге пишет, что происходит ошибка?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
06.08.2015, 18:49
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
castaway, да откуда мне знать, что в структурах происходит иначе???????
А при чём тут структуры?
0
06.08.2015, 18:51  [ТС]

Не по теме:

Ребят, что происходит?!

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.08.2015, 18:52
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
а почему тогда дейтел в книге пишет, что происходит ошибка?
с Дейтлом все в порядке.
он такого не утверждал:

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
сигнатура функции дочернего класса перекрывает сигнатуру базового класса, т.е. одинаковые имена методов накладываются друг на друга, из-за этого невозможно обратиться к методу базового класса.
Добавлено через 14 секунд
Цитата Сообщение от Nishen Посмотреть сообщение
Ребят, что происходит?!
новичок учиццо.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2015, 18:53
я не хочу устраивать холивар на ровном месте.
Я не виноват в том, что я оказался неправым, я лишь ссылался на информацию, и за ее правдивость не мне отвечать.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
06.08.2015, 19:05
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
не знаю, что ты за примеры придумываешь
У него абсолютно нормальные примеры. Они не противоречат тому, что я тебе написал. Они дополняют это.
Да, в С++ есть синтаксис, который позволяет явно указать из какого класса нужно позвать ту или иную функцию не смотря на то, что она была скрыта. Что и было продемонстрировано здесь.

Добавлено через 1 минуту
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Я не виноват в том, что я оказался неправым, я лишь ссылался на информацию, и за ее правдивость не мне отвечать.
Дейтел пишет для начинающих. Если на начинающих вываливать сразу всю тонну информации, которая относится к тем или иным приемам и конструкциям в языке, то проще не писать книгу, а сразу отправить читать стандарт С++.

Короче говоря, информация в книге не ложная, а неполная. Намеренно сжатая, чтобы не загружать мозг читателя лишними на данном этапе подробностями.
Для подробностей есть более продвинутые книги и, наконец, стандарт языка.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.08.2015, 19:06
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Я не виноват в том, что я оказался неправым, я лишь ссылался на информацию, и за ее правдивость не мне отвечать.
да ну никто на вас волну не гонит.
не в том суть.

а в том суть, что бы вы поняли:
одноименные функции в наследнике перекрывают онные в базовых классах.
сигнатура при этом значения не имеет.

Дейтл упомянул сигнатуру, видимо, что бы просто подчеркнуть:
привычные правила перегрузки не действуют.
перекрыты будут независимо от сигнатур.


и Дейтл действительно прав,
что через интерфейс наследника доступ к функциям-членам базы уже не получить.
это не значит, что вызвать функцию-член базового класс не возможно.
это можно сделать через явное разрешение контекста,
как я это выше продемонстрировал.
вызов вида:
C++
1
d.base::foo(10); //<--- указываем явно, что хотим метод предка
но именно через интерфейс наследника уже не получится.
C++
1
d.foo(10); //<--- будет ошибка
но при этом Дейтл почему то не сообщил,
что это справделиво только,
если область видимости функция-членов базы не была расшарена на наследника,
при помощи оператора using

C++
1
using CountDn::operator--;
и в принципе, господин DrOffset уже показал вам этот момент на примере,
и пояснил насчет using.

по идее, от меня сейчас вы могли узнать только
про явный вызов функции-члена предка.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2015, 19:07
DrOffset,
C++
1
2
3
4
5
6
int main()
{
    std::cout << "Hello, world!\n";
    der d;
    d.base::foo(10);
}
Только щас заметил, что он явно вызывает foo из пространства имен другой структуры, я то имел в виду совсем другое, а именно:
C++
1
d.foo(10);
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
06.08.2015, 19:19  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
в книге Лафоре не описывается этот тонкий момент
Да, кстати, у Лафоре говорится об этой ситуации следующее:
Существует правило: если один и тот же метод существует и в базовом, и в производном классе, то будет выполнен метод производного класса. (Это верно для объектов производного класса. Объектам базового класса ничего не известно о производном классе, поэтому они всегда пользуются методами базового класса). В этом случае мы говорим, что метод производного класса перегружает метод базового класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2015, 19:19

Наследование
Суть задачи: Реализуйте класс символьная строка,наследуйте от него класс двоичная строка. Реализуйте методы Show(от базовой строки) ...

Наследование
Здравствуйте! Написал код, не выдает никаких ошибок, но не работает. Может кто помочь сказать в чем может быть ошибка? Изначально был...

наследование
Помогите разобраться в программе. Почему возникают такие ошибки cylindr.cpp expected `,' or `...' before '&amp;' token cylindr.cpp `c'...

Наследование
Доброе дня, прошу вас помочь в решение данной задачи.

Наследование?!
привет всем. Есть класс Circle c1, c2, c3 Нужно реализовать через наследование класс множество, прошу помочь как он будет выглядеть...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru