Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
1

Вызов метода родительского класса

27.10.2016, 14:34. Показов 2583. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго вечера!

Читаю Р. Лафоре. Он пишет:

Но в классе CountDn нет конструктора, каким же образом выполняется инициализация? Оказывается, что если мы не определили конструктор производного класса, то будет использован подходящий конструктор базового класса. ... Объект производного класса также может использовать методы operator++() и get_count() из базового класса.
Т.е. исходя из этого, можно предположить, что производный класс имеет доступ к методам своего родителя.

Далее я делаю задание:

Counter.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
 
class Counter {
    
    protected:
        unsigned int count;
 
    public:
        Counter();
        Counter(unsigned int value);
 
        unsigned int getValue() const;
 
        const Counter & operator++ ();
 
};


Counter.cpp
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
#include "Counter.h"
 
Counter::Counter() : count(0) {
 
    //The empty body of the constructor
 
}
 
Counter::Counter(unsigned int value) : count(value) {
 
    //The empty body of the constructor
 
}
 
unsigned int Counter::getValue() const {
 
    return count;
 
}
 
const Counter & Counter::operator++ () {
 
    return Counter(++count);
 
}


CountDn.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
 
#include "Counter.h"
 
class CountDn : public Counter {
 
    public:
        CountDn();
        CountDn(unsigned int value);
        const CountDn & operator-- ();
 
};


CountDn.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "CountDn.h"
 
CountDn::CountDn() : Counter() {
 
    //The empty body of the constructor
 
}
 
CountDn::CountDn(unsigned int value) : Counter(value) {
 
    //The empty body of the constructor
 
}
 
const CountDn & CountDn::operator-- () {
 
    return CountDn(--count);
 
}


CountFull.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include "CountDn.h"
 
 
class CountFull : public CountDn {
 
    public:
        CountFull();
        CountFull(unsigned int value);
 
        const CountFull & operator--(int);
        const CountFull & operator++(int);
 
};


CountFull.cpp
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
#include "CountFull.h"
 
 
 
CountFull::CountFull() : CountDn() {
 
}
 
CountFull::CountFull(unsigned int value) : CountDn(value) {
 
 
}
 
const CountFull & CountFull::operator++(int) {
 
    return CountFull(count++);
 
}
 
const CountFull & CountFull::operator--(int) {
 
    return CountFull(count--);
 
}


main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "CountFull.h"
#include <iostream>
 
using namespace std;
 
 
 
int main() {
 
    CountFull a = 1;
 
    ++a;
        --a;
 
    cout
        << a.getValue()
        << endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
 
}


И компилятор выдает следующую ошибку:
error C2675: унарный "++": "CountFull" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
Подскажите, пожалуйста, почему так и с чем это связано? Ведь я, например, могу вызывать для объект CountDn метод operator--. Почему для второго наследования это не работает?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2016, 14:34
Ответы с готовыми решениями:

Вызов конструктора из родительского класса
Как вызвать конструктор для производного класса из родительского?

Вызов конструктора родительского класса
Здравствуйте, столкнулся с такой проблемой: при вызове конструктора класса потомка (Derv1) через...

Вызов функции родительского класса в наследнике
Подскажите, пожалуйста, можно ли вызвать функцию родительского класса если в наследнике уже есть...

Вызов функций наследников из родительского класса
Здравствуйте, нужно сделать вызов функции из функции родителя. void Ape(char key) { key =...

1
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
27.10.2016, 16:28 2
Цитата Сообщение от Nishen Посмотреть сообщение
const CountFull & CountFull::operator++(int)
Это постфиксный оператор, а в коде вызывается префиксный.

Добавлено через 53 секунды
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
73
74
class Counter {
 
protected:
    unsigned int count;
 
public:
    Counter() : count(0) {}
    Counter(unsigned int value) : count(value) {}
 
    unsigned int getValue() const {
        return count;
    }
 
    Counter & operator++ () {
        ++count;
        return *this;
    }
};
 
class CountDn : public Counter {
 
public:
    CountDn() : Counter() {}
 
    CountDn(unsigned int value) : Counter(value) {}
 
    CountDn & operator-- () {
        --count;
        return *this;
    }
};
 
class CountFull : public CountDn {
 
public:
    CountFull() : CountDn() {
    }
 
    CountFull(unsigned int value) : CountDn(value) {
    }
 
    CountFull & operator++() {
        ++count;
        return *this;
    }
 
    CountFull & operator--() {
        --count;
        return *this;
    }
 
    CountFull operator++(int) {
        CountFull temp(*this);
        ++count;
        return temp;
    }
 
    CountFull operator--(int) {
        CountFull temp(*this);
        --count;
        return temp;
    }
};
 
using namespace std;
 
int main()
{
    CountFull a = 1;
    a++;
    --a;
    --a;
    cout << a.getValue() << endl;
}
Добавлено через 1 минуту
Цитата Сообщение от Nishen Посмотреть сообщение
const Counter & Counter::operator++ () {
return Counter(++count);
}
Возвращение ссылки на временный объект.
0
27.10.2016, 16:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2016, 16:28
Помогаю со студенческими работами здесь

Вызов метода класса из метода другого класса
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd,...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp,...

Вызов динамического метода класса по указателю на объект класса
Как это можно сделать? И хотелось бы как можно проще.

Вызов метода внутреннего класса методом внешнего класса
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru