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

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

Войти
Регистрация
Восстановить пароль
 
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
#1

Наследование\перегрузка, не понимаю в чем ошибка - C++

31.05.2011, 11:46. Просмотров 345. Ответов 7
Метки нет (Все метки)

Почему в выделенных местах пишет ошибку про неопределенность? Если оставить наследование только от Counter, то все норм. Пробовал Counter::count++ тоже самое.
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
class Counter
   {
   protected:                            //NOTE: not private
      unsigned int count;                //count
   public:
      Counter() : count(0)               //constructor, no args
         {  }
      Counter(int c) : count(c)          //constructor, one arg
         {  }
      unsigned int get_count() const     //return count
         { return count; }
      Counter operator ++ ()             //incr count (prefix)
         { return Counter(++count); }
   };
////////////////////////////////////////////////////////////////
class CountDn : public Counter
   {
   public:
      CountDn() : Counter()              //constructor, no args
         { }
      CountDn(int c) : Counter(c)        //constructor, 1 arg
         { }
      CountDn operator -- ()             //decr count (prefix)
         { return CountDn(--count); }
   };
////////////////////////////////////////////////////////////////
class CountP : public Counter, CountDn
{
    CountP() : Counter()
    {}
    CountP(int c) : Counter(c)
    {}
    CountP operator ++ (int) 
    { return CountP([COLOR="Red"]count[/COLOR]++); }
    CountP operator -- (int)
    { return CountP([COLOR="#ff0000"]count[/COLOR]--); }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2011, 11:46     Наследование\перегрузка, не понимаю в чем ошибка
Посмотрите здесь:

C++ Наследование, не понимаю в чем ошибка
не понимаю как сделать наследование классов C++
Наследование. Элементарный пример. В чем ошибка? C++
C++ Немного не понимаю как правильно сделать наследование
C++ Как правильно производится наследование элементов от шаблона класса? В чем ошибка?
Не понимаю в чем ошибка. Неправильно считает количество повторений C++
C++ Не могу понять, в чем ошибка. Наследование классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.05.2011, 11:49     Наследование\перегрузка, не понимаю в чем ошибка #2
Nubik756, virtual public Counter. А лучше наследуйся только от CountDn, но открытым наследованием.
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
31.05.2011, 11:51  [ТС]     Наследование\перегрузка, не понимаю в чем ошибка #3
Что такое открытое? public? Я еще ничего не знаю про виртуальное)
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.05.2011, 11:52     Наследование\перегрузка, не понимаю в чем ошибка #4
Nubik756, public. Раз не знаешь про виртуальное - наследуйся от одного класса. CountDn.
Но очень не уверен, что у тебя будет доступен count в классе CountP.
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
31.05.2011, 11:58  [ТС]     Наследование\перегрузка, не понимаю в чем ошибка #5
Пишет про недоступность при попытке что-либо сделать (даже создать объекта CountP)
C++
1
2
3
4
5
6
7
8
9
10
11
class CountP : public CountDn
{
    CountP() : CountDn()
    {}
    CountP(int c) : CountDn(c)
    {}
    CountP operator ++ (int) 
    { return CountP(count++); }
    CountP operator -- (int)
    { return CountP(count--); }
};
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.05.2011, 12:03     Наследование\перегрузка, не понимаю в чем ошибка #6
Учимся читать ошибки. Ага.

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
#include <iostream>
 
class Counter
   {
   protected:                            //NOTE: not private
      unsigned int count;                //count
   public:
      Counter() : count(0)               //constructor, no args
         {  }
      Counter(int c) : count(c)          //constructor, one arg
         {  }
      unsigned int get_count() const     //return count
         { return count; }
      Counter operator ++ ()             //incr count (prefix)
         { return Counter(++count); }
   };
////////////////////////////////////////////////////////////////
class CountDn : public Counter
   {
   public:
      CountDn() : Counter()              //constructor, no args
         { }
      CountDn(int c) : Counter(c)        //constructor, 1 arg
         { }
      CountDn operator -- ()             //decr count (prefix)
         { return CountDn(--count); }
   };
////////////////////////////////////////////////////////////////
class CountP : public CountDn
{
public:
        CountP() : CountDn()
        {}
        CountP(int c) : CountDn(c)
        {}
        CountP operator ++ (int) 
        { return CountP(count++); }
        CountP operator -- (int)
        { return CountP(count--); }
}; 
 
int main()
{
    CountP count(5);
    std::cout << count.get_count() << '\n';
    count++;
    std::cout << count.get_count() << '\n';
}
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
31.05.2011, 12:21  [ТС]     Наследование\перегрузка, не понимаю в чем ошибка #7
эм...А в чем разница между этим кодом и моим?) Что-то не нашел ни 1 отличия в классах, но почему-то работает)
у меня при аналогичном main'е выдавало
cannot access private member declared in class 'CountP'
1> 1.cpp(47) : see declaration of 'CountP::CountP'
1> 1.cpp(45) : see declaration of 'CountP'
но вроде же ничего не изменилось оО
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2011, 12:27     Наследование\перегрузка, не понимаю в чем ошибка
Еще ссылки по теме:

C++ Типы шаблонов и перегрузка - в чем ошибка компиляции?
В чем ошибка? Перегрузка оператора ввода\вывода C++
Наследование класов. Не могу понять в чем ошибка C++
C++ Не понимаю в чем ошибка

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
31.05.2011, 12:27     Наследование\перегрузка, не понимаю в чем ошибка #8
Строка 31 в новом коде
Yandex
Объявления
31.05.2011, 12:27     Наследование\перегрузка, не понимаю в чем ошибка
Ответ Создать тему
Опции темы

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