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

Двойная диспетчеризация :) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Матрица переходов. Транслятор http://www.cyberforum.ru/cpp-beginners/thread823445.html
Здравствуйте! Пишу курсовик (транслятор с языка С на язык ASM). Подскажите пожалуйста как правильно пользоваться сей вещью (матрица переходов), ибо в методичке ничего толкового не написано. Список лексем получил, а что дальше делать ;)? Добавлено через 41 минуту Если конкретнее то нужно рассказать про "Матрицу переходов конечного автомата". Ещё непонятно какие состояния нужно брать и...
C++ Вывод результата нажатием кнопки Esc Не буду писать условие задачи, проблема заключается в том, что при нажатии клавиши Ecs, необходимо выводить результат работы программы. Полагаю, что нужно использовать оператор getche(), только я не знаю, есть ли какой-то символ для клавиши Ecs, как у Enter, к примеру? Добавлено через 25 минут Разобрался сам :) http://www.cyberforum.ru/cpp-beginners/thread823439.html
Является ли граф деревом C++
Суть задачи заключается в том, что нужно проверить граф, является ли он деревом. Граф является деревом, если граф - связный и в графе отсутствуют циклы. Проверку на связность я осуществляю с помощью поиска в глубину. Вопрос заключается в том, как мне "написать" проверку на циклы? В просмотренной литературе ничего подходящего найти не могу, либо написано сложно для понимая: векторы и т.д. Надеюсь...
массив структур C++
Написать функцию для создания массива записей со сведениями о студентах (ФИО, возраст, курс, успеваемость). По заданному массиву определить средний бал успеваемости студентов n курса.
C++ Текстовые и бинарные файлы. Получить файл g из чисел исходного файла http://www.cyberforum.ru/cpp-beginners/thread823423.html
Компоненты файла f – целые числа, положительных чисел столько же, сколько отрицательных. Получить файл g из чисел исходного файла, в ко-тором не было бы двух соседних чисел с одинаковым знаком.
C++ Как преобразовать long double в char[]? Приветствую. Подскажите пожалуйста, как преобразовать long double в в тип char? До указателей по книге еще не дошел, в интернете пытался найти функцию, так и не разобрался. Самое интересное что в книге об этом ничего не сказано, зато задание есть такое. Плюсану на спасибо за ответ. подробнее

Показать сообщение отдельно
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
31.03.2013, 14:15  [ТС]     Двойная диспетчеризация :)
Цитата Сообщение от Nick Alte Посмотреть сообщение
Виртуальные функции вызываются "по факту", в зависимости от реального типа объекта. Отсюда и название (virtual переводится как "фактический"). Иллюстрация:
Так можно просто в классе Derived bar записать без virtual
отак:
C++
1
2
3
4
5
class Derived: public Base{
public:
    void foo() const {cout << "Derived::foo" << endl;}
    void bar() const {cout << "Derived::bar" << endl;}
};
и в программке то же самое выводится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    Base b;
    Derived d;
    Base* pb = &d;
    b.foo();  // Печатает Base::foo
    b.bar();  // Печатает Base::bar
    d.foo();  // Печатает Derived::foo
    d.bar();  // Печатает Derived::bar
    pb->foo();    // Печатает Base::foo, хотя pb указывает на объект Derived, потому что pb имеет тип Base*
    pb->bar();    // Печатает Derived::bar, потому что функция виртуальная и вызывается через сам объект, который знает свой настоящий тип
}
Он же наверно смотрит по базовой виртуальной функции. (компилятор смотрит)

Добавлено через 5 минут
Ладно понял для чоткой записи virtual оставляем.
Спасибо всем щас буду на практике пробовать как чо работает.

Добавлено через 4 минуты
Щас я напишу простую программку реализующую двойную диспетчеризацию на примере Shape и производных Triangle, Square, и Rectangle. Зацените правильно ли сделал.

Добавлено через 20 минут
От написал ну чото это похоже на одинарную диспетчеризацию, яж ведь как бы одну функцию вызвал, только два объекта как параметры передал или это и есть двойная диспетчеризация?
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using std::cout;
using std::endl;
 
class Shape
{
public:
    virtual void intersec(Shape a, Shape b){};//f opredel9yucha9 perecechenie
};
 
class Triangle : public Shape
{
public:
    virtual void intersec(Shape a, Shape b)
    {
        cout <<"intersec Triangle"<<endl;
    }
};
 
class Square : public Shape
{
public:
    virtual void intersec(Shape a, Shape b)
    {
        cout <<"intersec Square"<<endl;
    }
};
 
class Rectangle : public Shape
{
public:
    virtual void intersec(Shape a, Shape b)
    {
        cout <<"intersec Rectangle"<<endl;
    }
};
 
int main()
{
    Shape* Shape;
    Rectangle R;
    Triangle T;
    Square S;
    Shape=&R;
    Shape->intersec(R,T);//intersec Rectangle
    
    return 0;
}
Добавлено через 3 минуты
По условию задачи нужно два объекта передавать. Но я так смотрю можно б и один параметр хз. Второй же объект в самом классе как бы известен.
 
Текущее время: 08:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru