Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
pEntity
73 / 92 / 22
Регистрация: 12.12.2012
Сообщений: 1,095
1

Для чего виртуальные функции?

07.11.2013, 22:06. Просмотров 415. Ответов 5
Метки нет (Все метки)

Как я понял в классах наследниках их можно использовать,для одинаковых имен функций. Но помойму это не главное их свойство.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 22:06
Ответы с готовыми решениями:

Для чего нужны виртуальные функции и виртуальное наследование ?
Для чего нужны виртуальные функции и виртуальное наследование ? Я нашел не...

Виртуальные функции для наследников
Здравствуйте. У меня есть класс Aray с виртуальной функцией поэлементного...

Виртуальные и чисто виртуальные функции
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции...

Виртуальные функции: создание фабрики объектов для множества фигур
C++,консольное приложение.Задание на использование виртуальных функций.Задание...

Для чего нужны указатели на функции?
для чего нужны эти указатели на функции... не проще ли вызвать саму функцию,...

5
Croessmah
++Ͻ
14609 / 8363 / 1576
Регистрация: 27.09.2012
Сообщений: 20,557
Записей в блоге: 2
Завершенные тесты: 1
07.11.2013, 22:16 2
Для реализации позднего связывания.

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
#include <iostream>
 
 
struct Parent {
    virtual void foo ( ) {
        std :: cout << "Parent::foo ( )" << std :: endl ;
    }
    void bar ( ) {
        std :: cout << "Parent::bar ( )" << std :: endl ;
    }
} ;
 
struct Child : Parent {
    virtual void foo ( ) {
        std :: cout << "Child::foo ( )" << std :: endl ;
    }
    void bar ( ) {
        std :: cout << "Child::bar ( )" << std :: endl ;
    }
} ;
 
void test ( Parent & obj ) {
    obj.foo ( ) ;
    obj.bar ( ) ;
}
 
int main ( ) {
    Parent obj1 ;
    Child obj2 ;
    std :: cout << "Test Parent:" << std :: endl ;
    test ( obj1 ) ;
    std :: cout << "Test Child:" << std :: endl ;
    test ( obj2 ) ;
}
0
Alex0491
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 15
07.11.2013, 22:55 3
Для того чтобы функцию можно переопределить в наследнике
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.11.2013, 23:08 4
Цитата Сообщение от Alex0491 Посмотреть сообщение
Для того чтобы функцию можно переопределить в наследнике
её и без виртуальности можно переопределить в наследнике
0
programina
2050 / 605 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.11.2013, 09:42 5
Виртуальные функции - это инструмент, с помощью которого реализуется полиморфизм, т.е. множество реализаций (в потомках базового класса) и один интерфейс (одно имя метода для всех потомков). Базовый класс, в котором есть только определение виртуального метода без реализации называется абстрактным классом.
C++
class Animal {
public:
  virtual void setfood() { cout << "Ошибка. Неизвестный зверь\n"; }
};
 
class Dog : public Animal {
public:
  virtual void setfood() { cout << "дать педигри\n"; }
};
 
class Cat : public Animal {
public:
  virtual void setfood() { cout << "дать вискас\n"; }
};
 
 
int main()
{
  Animal *animal;
  Dog dog;
  Cat cat;
 
  animal->setfood();
 
  animal = &dog;
  animal->setfood(); // или dog.setfood();
 
  animal = &cat;
  animal->setfood(); // или cat.setfood();
 
}
Добавлено через 3 минуты
Цитата Сообщение от Alex0491 Посмотреть сообщение
Для того чтобы функцию можно переопределить в наследнике
Переопределить можно, но без виртуальности переопределение затронет не конкретного потомка, а всех подряд.
0
zss
Модератор
Эксперт С++
7178 / 6677 / 4226
Регистрация: 18.12.2011
Сообщений: 17,621
Завершенные тесты: 1
08.11.2013, 09:48 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
  Animal *animal; //  animal имеет тип "указатель на базовый класс"
  Animal UnKnown;
  Dog dog;
  Cat cat;
  
  animal = &UnKnown;  // инициализируем указатель адресом базового класса.
  animal->setfood();  // вызывается метод из базового класса Animal
 
  animal = &dog;   // инициализируем указатель адресом производного класса.
  animal->setfood(); // вызывается метод из производного класса Dog
 
  animal = &cat;  // инициализируем указатель адресом другого производного класса.
  animal->setfood(); //  // вызывается метод из производного класса Cat
}
1
08.11.2013, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2013, 09:48

Прототип функции.Для чего нужен
для чего нужен прототип в этом примере int func(int a, int b); int...

Для чего нужны callback-функции
Для чего нужны callback-функции? И можно привести какой-нибуль пример по их...

Для чего и как нужно использовать функции Set, Get?
может кто-то обяснить для чего и как нужно использовать Set, Get в с++? есть...


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

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

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