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

Непонятки с наследованием - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Частотный анализ текста (пословный) http://www.cyberforum.ru/cpp-beginners/thread109354.html
24. Частотный анализ текста (пословный). (Подсчитывается относительная частота встречаемости каждого слова в тексте; границами слов являются символы: точка, запятая, двоеточие, точка с запятой, пробел, скобки, тире, вопросительный и восклицательный знаки.) Текст вводится с клавиатуры, должна быть возможность записи его в файл; вывод результатов на экран, принтер или в файл по желанию...
C++ Builder В каком заголовочном файле находится delay (BCB6)? В справочной системе C++ Builder 6 Нашел вот этот пример использования функции clock и выдает ошибку не находит функцию delay. Это глюк разроботчиков или я чето путаю? /* clock example */ #include <time.h> #include <stdio.h> #include <dos.h> int main(void) { http://www.cyberforum.ru/cpp-beginners/thread109341.html
Цифры и числа! C++
Для заданного М вывести все: а) квадраты натуральных чисел, не превосходящие М; б) факториалы натуральных чисел, не превосходящие М; в) целые степени данного числа К, не превосходящие М. не успеваю к зачёту помогите сделать есть небольшой набросок выдаёт ахинею( Добавлено через 20 минут Для заданного М вывести все: а) квадраты натуральных чисел, не превосходящие М; б) факториалы...
C++ составить блок схемы к программам
1) При температуре воздуха зимой до -20 ◦ С потребления угля тепловой станцией составляет 50 тонн в день. При температуре воздуха от -20 ◦ С до -30 ◦ С ежедневное потребление угля увеличивается на 5 тонн; если же температура воздуха ниже -30 ◦ С, то потребление угля увеличивается еще на 7 тонн. Определить необходимое количество угля, потребляемого тепловой станцией при заданной температуре...
C++ Найти квадратную подматрицу максимального размера http://www.cyberforum.ru/cpp-beginners/thread109332.html
Ввести матрицу, которая состоит из 0 и 1. Найти в ней квадратную подматрицу максимального размера, элементы которой имеют значение 1. Добавлено через 22 часа 27 минут
C++ посмотрите задания такого рода посмотрите задания такого рода подробнее

Показать сообщение отдельно
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
27.03.2010, 14:29     Непонятки с наследованием
Пример с комментированной ошибкой :
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
#include <iostream>
using namespace std;
 
class Counter {
   protected:        
   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;   }
    
 
};
  
class postfix : public CountDn {
 
    public:
        postfix() : CountDn()
        {}
        postfix(int c) : CountDn(c)
        {}
/* Постфиксная накрывает префиксную базового, так компилятор считает, и поэтому ++dd; будет ошибкой 
так как префиксной нет
 накрывает : делает не доступной 
  */
            postfix  operator ++(int){
            postfix obj(*this); count++;
            return obj;
        }
 
/* Постфиксная накрывает префиксную базового, так компилятор считает, и поэтому --bb; будет ошибкой, 
так как префиксной нет
   накрывает : делает не доступной  
*/          
            postfix  operator --(int){
            postfix obj(*this); count--;
            return obj;
        }
 
        
};
 
int main()
   {
   postfix dd,bb(20);  
   dd++;
   bb--;
   ++dd; //ошибка
   --bb; //ошибка
  return 0;
 }
Вероятно компилятор разрешает наследовать парами ++ и ++(int) -- и --(int)
он не разрешает разбрасывается формами операций по иерархии,
тем более получается что базовые классы по твоему примеру обладают недостатками:
так как определена только одна префиксная форма ++ и -- у каждого
По твоему примеру получается префиксальная своя а постфиксная от другого как то некрасиво.

Вот мое предложение.
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
#include <iostream>
using namespace std;
 
class Counter {
   protected:        
   int count;  
   public:
      Counter() : count(0)      
         {  }
      Counter(int c) : count(c)    
         {  }
      unsigned int get_count() const  
         { return count; }
      Counter& operator ++ (){ ++count; return * this ; }
 
            Counter operator ++(int){
            Counter obj(*this); count++;
            return obj;
        }
 
 
};
 
class CountDn : public Counter {
 
   public:
      CountDn() : Counter()
         { }
      CountDn(int c) : Counter(c)  
         { }
      CountDn& operator -- ()    {  --count; return *this;   }
      
      CountDn operator --(int){
            CountDn obj(*this); count--;
            return obj;
        }
 
};
  
class postfix : public CountDn {
 
    public:
        postfix() : CountDn()
        {}
        postfix(int c) : CountDn(c)
        {}
 
        
};
 
int main()
   {
   postfix c1;          
   postfix c2(100);
   cout << "\nc1=" << c1.get_count();  
   cout << "\nc2=" << c2.get_count();
   ++c1; ++c1; ++c1;              
   c2++;c1++;
   cout << "\nc1=" << c1.get_count();  
   --c2; --c2;                  
   cout << "\nc2=" << c2.get_count();  
 
  return 0;
 
 }
 
Текущее время: 20:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru