Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обнаружением нулевого указателя http://www.cyberforum.ru/cpp-beginners/thread1001175.html
Делаю алгоритм Хаффмана. Возникла проблема при построении таблицы соответствий. void MakeT (Node* root){ if(root->L!=NULL) {//проблемная строка code.push_back(0); MakeT(root->L); }...
C++ Не роботает сортировка Проблема в сортировке( программа проходит, но ничего полезного не делает), ее, мне так кажется, надо реализовать с помощью адресов. Буду рада всем вашым советам!!! main # include "class_m.h" #... http://www.cyberforum.ru/cpp-beginners/thread1001169.html
C++ Чтение из текстового файла
Есть список автомобилей с параметрами (марка ,цвет ,стоимость и так далее ) , хранившиеся в текстовом файле . Нужно написать программу в которой делается следующее. корректировку или дополнение...
Выявление ошибки C++
Помогите, пожалуйста, исправить программу (в функции treug в качестве параметра нужно использовать указатель *p), затем его использовать при вызове функции. Заранее большое спасибо. #include...
C++ Как создать динамический двумерный массив http://www.cyberforum.ru/cpp-beginners/thread1001133.html
Можно ли создать на С++ динамический двухмерный масив? Как? int z , x ; cin >> z ; cin >> x ; int *arr = new int(z); int *arr1 = new int(x); так не получаеться!
C++ Удаление последнего слова из строки Написать программу удаления последнего слова из строки. Заранее благодарю. подробнее

Показать сообщение отдельно
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.11.2013, 09:42
Виртуальные функции - это инструмент, с помощью которого реализуется полиморфизм, т.е. множество реализаций (в потомках базового класса) и один интерфейс (одно имя метода для всех потомков). Базовый класс, в котором есть только определение виртуального метода без реализации называется абстрактным классом.
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru