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

Наследник класса, переопределение функции - C++

Войти
Регистрация
Восстановить пароль
 
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
21.06.2013, 14:16     Наследник класса, переопределение функции #1
Доброго времени суток! Есть не виртуальный класс, от него необходимо наследоваться и перегрузить одну из функций. Входные параметры будут такие же, как и у существующей, имя функции необходимо оставить тоже! Можно ли это вообще сделать, или придется какой-либо фиктивный входной параметр добавлять, либо вообще в корне менять имя функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 14:16     Наследник класса, переопределение функции
Посмотрите здесь:

C++ Переопределение [][] или ()() для класса
Переопределение БИНАРНОГО оператора внутри класса C++
переопределение методов класса в массиве C++
Переопределение оператора <<, класса ofstream C++
класс наследник на основе базового класса C++
Написать класс «множество» – наследник класса «массив» C++
Переопределение метода класса-шаблона C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 14:34     Наследник класса, переопределение функции #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A
{
  public:
    virtual void myMethod()
    {
        // ...
    }
}
 
class B : public A
{
  public:
    void myMethod()
    {
        // ...
    }
}
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.06.2013, 14:47     Наследник класса, переопределение функции #3
а чего не то
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
class A
{
public:
    void f(int a)
    {
        printf("ClassA %i\n", a);
    }
};
class B:public A
{
    public:
    void f(int a)
    {
        printf("ClassB %i\n", a);
    }
};
 
int main()
{
    A a;
    a.f(6);
    B b;
    b.f(5);
    getchar();
    return 0;
}
Вывод:
ClassA 6
ClassB 5;
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 14:51     Наследник класса, переопределение функции #4
aLarman
C++
1
2
A *b = new B();
b->f(5);
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.06.2013, 14:55     Наследник класса, переопределение функции #5
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Есть не виртуальный класс, от него необходимо наследоваться и перегрузить одну из функций
@kvadro, ну и что вызовется функция класса А, а что ты хотел сказать?)
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 15:01     Наследник класса, переопределение функции #6
Человеку нужно перезагрузить метод, а не вызвать метод его родителя.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.06.2013, 15:03     Наследник класса, переопределение функции #7
Цитата Сообщение от kvadro Посмотреть сообщение
перезагрузить
наверное все таки перегрузить
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
class B:public A 
{ 
public: 
void f(int a)
{ 
printf("ClassB %i\n", a); 
}
 };
это разве не перегрузка :?
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 15:13     Наследник класса, переопределение функции #8
Начнём с того что:
Входные параметры будут такие же
имя функции необходимо оставить тоже
Уже скорей он не про перегрузку говорит.

Добавлено через 3 минуты
это разве не перегрузка
Нет

Добавлено через 44 секунды
Вот это перегрузка:
C++
1
2
void f(int a);
void f(int a, int b);
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.06.2013, 15:14     Наследник класса, переопределение функции #9
Цитата Сообщение от kvadro Посмотреть сообщение
Уже скорей он не про перегрузку говорит.
Обычно говорят переопределение унаследованных методов. Это не разновидность перегрузки.
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
Входные параметры будут такие же, как и у существующей, имя функции необходимо оставить тоже
Переопределение так и делается, по другому не получится.
Можно делать методы виртуальными, можно нет. На решение данной задачи это не влияет.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.06.2013, 15:17     Наследник класса, переопределение функции #10
ок, туплю а что значит
Цитата Сообщение от kvadro Посмотреть сообщение
перезагрузить метод
?
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 15:18     Наследник класса, переопределение функции #11
alsav22
Ну я и имел ввиду что скорей всего он не правильно выразился, и говорил про переопределение метода.

Добавлено через 59 секунд
а что значит
Значит опечатка.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.06.2013, 15:25     Наследник класса, переопределение функции #12
Цитата Сообщение от kvadro Посмотреть сообщение
Ну я и имел ввиду что скорей всего он не правильно выразился, и говорил про переопределение метода.
Наверное. В заголовке темы: переопределение функции.
necheyhin_a_v
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
22.06.2013, 08:34  [ТС]     Наследник класса, переопределение функции #13
В пояснении опечатка, необходимо переопределить функцию! На сколько я понял вызываться будет все корректно? Функция базового класса не виртуальная!!! Базовый класс править нельзя!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2013, 01:26     Наследник класса, переопределение функции
Еще ссылки по теме:

C++ Переопределение оператора () для своего класса
C++ Переопределение класса вектор
Создать новый объект-наследник абстрактного класса C++
Переопределение переменной класса-родителя C++
Переопределение класса C++

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

Или воспользуйтесь поиском по форуму:
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
23.06.2013, 01:26     Наследник класса, переопределение функции #14
necheyhin_a_v
Если тип переменной явно прописан как тип наследника - будет работать всё нормально.
Иначе юзай делегаты.
Yandex
Объявления
23.06.2013, 01:26     Наследник класса, переопределение функции
Ответ Создать тему
Опции темы

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