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

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

Восстановить пароль Регистрация
 
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
19.07.2012, 19:04     Переопределение функции по наследовинии #1
Помниться в с# есть такая штучка 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
canopen
411 / 410 / 12
Регистрация: 16.07.2012
Сообщений: 886
19.07.2012, 19:09     Переопределение функции по наследовинии #2
Так же как и в C# надо объявить метод info в классе kub виртуальным (virtual)
Только в отличие от C# добавлять override в описание метода info в классе tre не надо
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
19.07.2012, 19:13     Переопределение функции по наследовинии #3
По-моему виртуальные методы привязываются к типу. Попробуй заменить все "void info();" на "virtual void info();"
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
19.07.2012, 19:13  [ТС]     Переопределение функции по наследовинии #4
точняк,спасибо

nexen
в классе kub,оказалось достаточным
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2012, 21:07     Переопределение функции по наследовинии #5
Цитата Сообщение от xADMIRALx Посмотреть сообщение
то есть если
для этого вовсе не нужно делать функции виртуальными, виртуальные функции нужны лишь при работе с ссылками и указателями!
alsav22
5282 / 4801 / 442
Регистрация: 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 Посмотреть сообщение
для этого вовсе не нужно делать функции виртуальными, виртуальные функции нужны лишь при работе с ссылками и указателями!
Дело в том, что ссыка или указатель, типа базового класса, может быть связан с объектом производного класса (но не наоборот), и в этом случае, чтобы вызывался метод не по типу ссылки или указателя, а по типу объекта, с которым эта ссылка или указатель связанны, метод должен быть объявлен в базовом классе как виртуальный.
Jupiter
19.07.2012, 23:14
  #7

Не по теме:

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

canopen
19.07.2012, 23:23
  #8

Не по теме:

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

alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
19.07.2012, 23:33     Переопределение функции по наследовинии #9
canopen, полагаю, что по аналогии с жабой в c# использование атрибутов необязательно
просто дополнительная проверка и документирование кода
Jupiter
19.07.2012, 23:35
  #10

Не по теме:

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

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

Переопределение операций C++
C++ Переопределение операций
C++ Переопределение функции в шаблоне

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

Или воспользуйтесь поиском по форуму:
alsav22
20.07.2012, 03:14     Переопределение функции по наследовинии
  #11

Не по теме:

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

Не по теме:

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

Это я для nexen

Yandex
Объявления
20.07.2012, 03:14     Переопределение функции по наследовинии
Ответ Создать тему
Опции темы

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