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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 376
#1

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

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

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

Для чего нужны виртуальные функции и виртуальное наследование ? - C++
Для чего нужны виртуальные функции и виртуальное наследование ? Я нашел не сколько статей но не все понял. Заранее спасибо!

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

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

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

Прототип функции.Для чего нужен - C++
для чего нужен прототип в этом примере int func(int a, int b); int main(){...} int func(a,b){ ... return a+b; } если...

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

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

Для чего нужны функции void, не возращающие никаких значений? - C++
собственно сабж. выводить текст можно и без функции. а для чего делать что-то, что в дальнейшем и не пригодится в программе? #include...

Не могу понять для чего третья переменная в параметрах функции - C++
int binpow (int a, int n) вот это понимаю, а вот этот не могу понять, что означает переменная b? unsigned int binpow(unsigned int a,...

Виртуальные функции - C++
Доброго времени суток. Есть задание. Создать абстрактный класс Function (функция) с виртуальными методами вычисления значения функции...

Виртуальные функции - C++
#include <iostream> #include <string> #include <string.h> #include <conio.h> using namespace std; class Array { ...

Виртуальные функции - C++
Вопрос. Как вызвать функцию наследника через указатель на базовый класс? Так не компилируется 3.cpp:19:19: error: invalid covariant...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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 ) ;
}
Alex0491
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 15
07.11.2013, 22:55     Для чего виртуальные функции? #3
Для того чтобы функцию можно переопределить в наследнике
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.11.2013, 23:08     Для чего виртуальные функции? #4
Цитата Сообщение от Alex0491 Посмотреть сообщение
Для того чтобы функцию можно переопределить в наследнике
её и без виртуальности можно переопределить в наследнике
programina
1914 / 599 / 37
Регистрация: 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 Посмотреть сообщение
Для того чтобы функцию можно переопределить в наследнике
Переопределить можно, но без виртуальности переопределение затронет не конкретного потомка, а всех подряд.
zss
Модератор
Эксперт С++
6282 / 5885 / 1906
Регистрация: 18.12.2011
Сообщений: 15,099
Завершенные тесты: 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
}
Yandex
Объявления
08.11.2013, 09:48     Для чего виртуальные функции?
Ответ Создать тему
Опции темы

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