34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,406
1

Слово return в простом примере с наследованием классов

06.07.2016, 22:08. Показов 442. Ответов 7
Метки нет (Все метки)

Добрый день!
Ниже приведён код. Подскажите, пожалуйста, для чего тут return . Почему нельзя просто вставить ++ count
(или --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
38
39
40
41
// counten.cpp
// inheritance with Counter class
#include <iostream>
using namespace std;
 
class Counter                            //base class
   {
   private:                            //NOTE: not private
      unsigned int count;                //count
   public:
      Counter() : count(0)               //no-arg constructor
         {  }
      Counter(int c) : count(c)          //1-arg constructor
         {  }
      unsigned int get_count() const     //return count
         { return count; }
      Counter operator ++ ()             //incr count (prefix)
         { return Counter(++count); }
   };
 
class CountDn : public Counter           //derived class
   {
   public:
      Counter operator -- ()             //decr count (prefix)
         { return Counter(--count); }
   };
 
int main()
   {
   CountDn c1;                           //c1 of class CountDn
 
   cout << "\nc1=" << c1.get_count();    //display c1
 
   ++c1; ++c1; ++c1;                     //increment c1, 3 times
   cout << "\nc1=" << c1.get_count();    //display it
 
   --c1; --c1;                           //decrement c1, twice
   cout << "\nc1=" << c1.get_count();    //display it
   cout << endl;
   return 0;
   }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2016, 22:08
Ответы с готовыми решениями:

ошибка в простом примере
Помогите определить в чем ошибка пожалуйста.

ошибка в простом примере
обьясните пожалуйста, как правильно вставить код площади прямоугольного треугольника по двум...

Подключение к БД в простом примере
Только начинаю разбираться с ASP.NET MVC, для начала делаю пример отсюда...

Управление потоками на простом примере
Покажите на простом примере как это делается. Создаю простую программу, которая выводит на экран...

7
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
06.07.2016, 22:52 2
метод класса возвращает private int переменную.
C++
1
2
Counter obj;
int x=obj.get_count(); // x будет равен нулю, т.к Counter() : count(0)
Добавлено через 1 минуту
или вас другое интересовало?
0
Модератор
Эксперт С++
12401 / 9981 / 6006
Регистрация: 18.12.2011
Сообщений: 26,706
07.07.2016, 07:28 3
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
return Counter(++count);
Похоже, это имеется ввиду.
Возвращать значение нужно, чтобы можно было написать
C++
1
Counter с2 = ++с1;
0
Эксперт С++
3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
08.07.2016, 03:45 4
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Подскажите, пожалуйста, для чего тут return . Почему нельзя просто вставить ++ count
(или --count)? Куда возвращается это значение?
Цитата Сообщение от zss Посмотреть сообщение
Возвращать значение нужно, чтобы можно было написать
C++
1
Counter с2 = ++с1;
Это значение возвращается из вызова operator++, т.е. из выражения
Цитата Сообщение от zss Посмотреть сообщение
++с1;
Только уважающие себя люди возвращают ссылку, иначе у вас такое не сработает:
C++
1
++++с1;
В общем, как-то так нужно:
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
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////////////////////////
class Counter
{
    //-------------------------------------------------------------------------
private:
    //-------------------------------------------------------------------------
    unsigned    count;
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    Counter( int    c   =   0 )
        :
        count(c)
    {}
    //-------------------------------------------------------------------------
    operator unsigned()
    {
        return  count;
    }
    //-------------------------------------------------------------------------
    Counter   &   operator++ ()
    {
        ++count;
        return  *this;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
class CountDn : public Counter
{
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    using   Counter::Counter;
    //-------------------------------------------------------------------------
    CountDn     &   operator-- ()
    {
        return  *this   =   *this     -   1;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
int main()
{
   CountDn  c1;
 
   cout     <<  "c1 = "
            <<  c1;
 
   ++--c1;
 
   cout     <<  "\nc1 = "
            <<  ++++++c1;
 
   cout     <<  "\nc1 = "
            <<  ----c1
            <<  endl;
}
0
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,406
08.07.2016, 18:13  [ТС] 5
Так в коде нет оператора типа
C++
1
c1=++c2;
0
2754 / 1908 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
08.07.2016, 20:03 6
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Так в коде нет оператора типа
А вдруг будет? Это, так сказать, типовая конструкция. Набрать return не сложно, а функция вроде как универсальней выходит.
Если же c1=++c2; не будет, умный оптимизатор этот return выкинет. По крайней мере, если вы не станете выносить код operator++ в отдельный файл - cpp файлы обычно компилируются отдельно, есть там в соседнем файле=++ или нет не учитывается. Впрочем, вроде как были ключики компилятора отключающие подобное поведение и включающие глобальную оптимизацию.
0
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,406
08.07.2016, 20:13  [ТС] 7
Дело в том, что эта программа не работает без return, хотя нет в ней c1=++c2. Я пробовал просто оставлять ++count- не работает. Может, действительно, возвращение идёт в переменную unsigned int count(9ая строка).
0
2754 / 1908 / 569
Регистрация: 05.06.2014
Сообщений: 5,560
08.07.2016, 20:15 8
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Дело в том, что эта программа не работает без return, хотя нет в ней c1=++c2.
Убираете return - меняйте и тип возвращаемого значения на void.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.07.2016, 20:15
Помогаю со студенческими работами здесь

Застрял на самом простом примере SASS
Как и писал в теме, застрял на самом простом примере, вернее на самом первом примере. В...

Ошибка #ЗНАЧ! в простом примере с .Offset(0, 0)
Здравствуйте! Уже 2 часа голову ломаю не получается простой пример работы с данными ячеек. Public...

Делегаты и их применение, желательно на простом примере
Я читаю книгу М. Фленов - Библия C# и дошел до темы &quot;Делегат&quot; но не как не могу понять (два раза...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru