Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
1

Переопределение функции по наследовинии

19.07.2012, 19:04. Просмотров 618. Ответов 10
Метки нет (Все метки)

Помниться в с# есть такая штучка override,есть ли что-нибудь подобное в с++?

Столкнулся с проблемой :
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
class kub
{
   int a;
public:
  kub(int b)
{
 a = b;
}
   void info();
};
void kub::info()
{
    printf("\nа = %d\n",a);
}
 
class tre : public kub
{
int b;
tre(int q,int w) : kub(q)
{
b = w;
}
 void  info()
};
void tre::info()
{
 printf("\nа = %d\nb = %d\n",a,b);//мне нужно переопределить эту функцию
/* 
 info(); 
printf("\nb = %d\n",b);
*/ такой вариант не подойдет
}
то есть если
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
  kub k(5);
tre t(15,15);
k.info();//выводил 1 вариант
t.info();// выводил 2 вариант
 
 
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2012, 19:04
Ответы с готовыми решениями:

определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Сабж, а подробнее если в заголовочном файле hider.h описана функция, допустим так: void f ();...

Переопределение виртуальной функции
Всем доброй ночи :) Есть базовый абстрактный класс и два производных класса (А и В), в которых я...

Переопределение функции в шаблоне
Подскажите, в пустом проекте работает следующий код #include <utility> #include <type_traits>...

Наследник класса, переопределение функции
Доброго времени суток! Есть не виртуальный класс, от него необходимо наследоваться и перегрузить...

10
425 / 426 / 93
Регистрация: 16.07.2012
Сообщений: 886
19.07.2012, 19:09 2
Так же как и в C# надо объявить метод info в классе kub виртуальным (virtual)
Только в отличие от C# добавлять override в описание метода info в классе tre не надо
2
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
19.07.2012, 19:13 3
По-моему виртуальные методы привязываются к типу. Попробуй заменить все "void info();" на "virtual void info();"
0
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
19.07.2012, 19:13  [ТС] 4
точняк,спасибо

nexen
в классе kub,оказалось достаточным
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.07.2012, 21:07 5
Цитата Сообщение от xADMIRALx Посмотреть сообщение
то есть если
для этого вовсе не нужно делать функции виртуальными, виртуальные функции нужны лишь при работе с ссылками и указателями!
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.07.2012, 22:21 6
Цитата Сообщение от xADMIRALx Посмотреть сообщение
то есть если
nt main()
{
kub k(5);
tre t(15,15);
k.info();//выводил 1 вариант
t.info();// выводил 2 вариант
return 0;
}
И будет выводить. Объект k будет вызывать свой метод, а объект t - свой.

Добавлено через 14 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
для этого вовсе не нужно делать функции виртуальными, виртуальные функции нужны лишь при работе с ссылками и указателями!
Дело в том, что ссыка или указатель, типа базового класса, может быть связан с объектом производного класса (но не наоборот), и в этом случае, чтобы вызывался метод не по типу ссылки или указателя, а по типу объекта, с которым эта ссылка или указатель связанны, метод должен быть объявлен в базовом классе как виртуальный.
0
Jupiter
19.07.2012, 23:14
  #7

Не по теме:

alsav22, вот спасибо, кэп

1
canopen
19.07.2012, 23:23
  #8

Не по теме:

Интереснее было бы обсудить почему в C# есть ключевое слово override, а в C++ - нет. И возникали ли из-за этого у кого-нибудь ошибки в C++ )))

0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
19.07.2012, 23:33 9
canopen, полагаю, что по аналогии с жабой в c# использование атрибутов необязательно
просто дополнительная проверка и документирование кода
0
Jupiter
19.07.2012, 23:35
  #10

Не по теме:

canopen, в С++11 ввели ключевое слово override

0
alsav22
20.07.2012, 03:14     Переопределение функции по наследовинии
  #11

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:

alsav22, вот спасибо, кэп

Это я для nexen

0
20.07.2012, 03:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2012, 03:14
Привет! Вот еще темы с ответами:

Шаблоны и переопределение функции swap
Есть у меня шаблонный класс, решил для него функцию swap написать: template <typename T> void...

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

Переопределение или перезагрузка функции
у меня есть класс комплексных чисел. И как можно определить функцию sqrt() что бы она работала с...

Ошибка. Переопределение параметров в функции
Добрый вечер всем! Такая задача: Необходимо составить программу для систем счисления (от 2 до 36)...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.