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

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

Войти
Регистрация
Восстановить пароль
 
 
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
#1

Наследование, счетчик, перегрузка операций: К префиксным операциям нет доступа - C++

08.08.2014, 18:20. Просмотров 862. Ответов 22
Метки нет (Все метки)

обычный счетчик с уровнями наследования. почему-то к префиксным операциям нет доступа. в чем дело?


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
62
63
64
65
66
67
68
69
70
71
72
#include "stdafx.h"
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class Counter
{
protected:     // заметьте, что тут не следует использовать private
    unsigned int count;              // счетчик
public:
    Counter() : count(0)              // конструктор без параметров
    { }
    Counter(int c) : count(c)        // конструктор с одним параметром
    { }
    unsigned int get_count() const   // получение значения
    {
        return count;
    }
    Counter operator++()             // оператор увеличения
    { 
        return Counter(++count);
    }
};
///////////////////////////////////////////////////////////
class CountDn : public Counter
{
public:
    CountDn() : Counter()            // конструктор без параметров
    { }
    CountDn(int c) : Counter(c)      // конструктор с одним параметром
    { }
    CountDn operator--()             // оператор уменьшения
    { 
        return CountDn(--count);
    }
};
class Postfix : public CountDn
{
public:
    Postfix() : CountDn()
    {}
    Postfix(int c) : CountDn(c)
    {}
    Postfix operator++(int)   
    { 
        return Postfix(count++);
    }
    Postfix operator--(int)           
    { 
        return Postfix(count--);
    }
};
///////////////////////////////////////////////////////////
int main()
{
    Postfix c1;                         // переменные класса CountDn
    Postfix c2(100);
 
    cout << "\nc1 = " << c1.get_count();// выводим значения на экран
    cout << "\nc2 = " << c2.get_count();
 
    ++c1; ++c1; ++c1;                   // увеличиваем c1
    cout << "\nc1 = " << c1.get_count();// показываем результат
 
    --c2; --c2;                         // уменьшаем c2
    cout << "c2 = " << c2.get_count();  // показываем результат
 
    Postfix  c3 = --c2;   // создаем переменную c3 на основе c2
    cout << "\nc3 = " << c3.get_count();// показываем значение
    cout << endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование, счетчик, перегрузка операций: К префиксным операциям нет доступа (C++):

Перегрузка оператора << Нет доступа к член данным! В чем загвоздка? - C++
Безумная странная ошибка. Перегрузил оператор вывода потока cout &lt;&lt;. Но в перегрузке ошибка, пишет что член данные недоступны, хотя функция...

Счетчик операций в цикле do-while - C++
Счетчик операций i выдает нереально завышенные цифры: всего 4 преобразования - как будто 15 операций в цикле произошло. Как его на работу...

Не работает счетчик операций - C++
Всем доброго вечера,может кто помочь? Изначально было задание переписать программу из паскалая в с++ включая процедуру findsum строки...

Нужно вставить счетчик операций в программу - C++
Здравствуйте товарищи программеры тут такая ситуация Есть уже написанная прога Единственно в чем я вас прошу помочь: ...

Перегрузка операций - C++
Здравствуйте, помогите с лабораторной. Я правильно сделал и как менять названия у перегрузки операций на + и - еще нормально но на...

Перегрузка операций - C++
Всем привет. Пытаюсь понять ооп. Задали такую лабу: 1. Определить класс согласно варианту задания (табл.1, столбец 2). 2. Определить...

22
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.08.2014, 02:19 #16
Pari, не за что.
Так что не надо писать ни касты, ни дубликаты функций, ни еще что-то такое - это все шаманство.
Всегда, если что-то не понятно, нужно искать истинные причины, а не сомнительные обходные маневры. Говоря проще, "зрите в корень", поэтому за вот этот вопрос
Цитата Сообщение от Pari Посмотреть сообщение
спасибо, но я не могу понять, почему все так усложняется... почему наследование классов не работает прямо?
плюс поставлю.
Успехов.
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
10.08.2014, 02:24  [ТС] #17
DrOffset, еще раз спасибо и еще один маленький вопрос, чтобы окончательно прояснить ситуацию:
в классе Postfix для чего нужен третий конструктор? спросить, увы, не у кого совершенно, все по учебнику учу(
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.08.2014, 02:42 #18
Цитата Сообщение от Pari Посмотреть сообщение
в классе Postfix для чего нужен третий конструктор?
мы "испортировали" оператор-- из базового класса CountDn. В строке 71 есть вот такой код
C++
1
Postfix  c3 = --c2;   // создаем переменную c3 на основе c2
operator-- возвращает объект класса CountDn. Но инициализация требуется объекта с3 класса Postfix. В классе Postfix нет способа провести такую инициализацию, поэтому нужно было написать конструктор, чтобы добавить возможность это делать.

Добавлено через 10 минут
Pari, кстати префиксные операторы реализованы не совсем корректно. Правильнее будет так:
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
class Counter
{
protected: 
    unsigned int count;              // счетчик
public:
    Counter() : count(0)              // конструктор без параметров
    { }
    Counter(int c) : count(c)        // конструктор с одним параметром
    { }
    unsigned int get_count() const   // получение значения
    {
        return count;
    }
    Counter & operator++()             // оператор увеличения
    { 
        ++count;
        return *this;
    }
};
class CountDn : public Counter
{
public:
    CountDn() : Counter()            // конструктор без параметров
    { }
    CountDn(int c) : Counter(c)      // конструктор с одним параметром
    { }
    CountDn & operator--()             // оператор уменьшения
    { 
        --count;
        return *this;
    }
};
1
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
10.08.2014, 02:47  [ТС] #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Правильнее будет так:
это вы кажется указатели использовали? если да, то я еще до них не дошла, как раз следующая глава изучаемой мною книги о них.
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.08.2014, 02:55 #20
Цитата Сообщение от Pari Посмотреть сообщение
это вы кажется указатели использовали?
Это ссылки. Можно сказать, более ограниченная (и соответственно безопасная) версия указателя. Но формально ссылка - это не указатель. Это скорее псевдоним для существующего объекта. Хотя во многих ситуациях ее внутренняя реализация будет идентична указателю (т.е. компилятором будут сгенерированы идентичные асссемблерные инструкции).
Цитата Сообщение от Pari Посмотреть сообщение
если да, то я еще до них не дошла, как раз следующая глава изучаемой мною книги о них.
Ну торопиться я не заставлю же. Как разберешь нужную тему, можно вернуться к этому примеру
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
10.08.2014, 02:58  [ТС] #21
DrOffset, вернусь и посмотрю другими глазами уже
хотя вообще странно поставлена задача у меня в книге. ни один из предложенных способов реализации Postfix не был упомянут в учебнике. как я его должна была сама делать - не понятно.
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.08.2014, 03:16 #22
Цитата Сообщение от Pari Посмотреть сообщение
ни один из предложенных способов реализации Postfix не был упомянут в учебнике
Что за книга?
0
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
10.08.2014, 03:24  [ТС] #23
Цитата Сообщение от DrOffset Посмотреть сообщение
Что за книга?
Р. Лафоре ООП в С++
0
10.08.2014, 03:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 03:24
Привет! Вот еще темы с ответами:

Перегрузка операций. - C++
Предусмотреть ввод исходных данных с клавиатуры, файла и используя датчик случайных чисел. Написать тестовую программу. Построить класс,...

Перегрузка операций - C++
Разработайте программу на языке С++, используя пользовательский тип данных – классы и перегрузку операций. Создайте класс Fraction...

Перегрузка операций - C++
Добрый день! Задание простенькое но не могу решить так как не получается перегрузка операций. Задание: Вычислить точное значение суммы...

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


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

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

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