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

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

Войти
Регистрация
Восстановить пароль
 
 
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
#1

Виртуальная функция - C++

08.04.2013, 12:28. Просмотров 605. Ответов 19
Метки нет (Все метки)

Создайте класс Matematica, определите в нем виртуальную функцию-член matem(int x, int y), которая выводит на экран значения параметров. Создайте производные классы Umn и Del с перегруженной функцией matem(int x, int y) для умножения и деления параметров соответственно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 12:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Виртуальная функция (C++):

Чистая виртуальная функция функция не имеет оператора переопределения - C++
Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется от Page. Page.h #pragma once ...

Виртуальная функция - C++
Создать производный класс Trapez(равнобокая трапеция). Определить в классе наследнике: -перегруженные функции для изменения сторон ...

Виртуальная функция - C++
В учебнике дается понятие абстрактного класса, как класса содержащего хоть одну виртуальную функцию. Проблема в том, что я так и не...

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

виртуальная функция - C++
class B { private: int a; int b; public: virtual void show();//есть виртуальная функция,которая выводит a и b } class...

Виртуальная функция - C++
Ругается на метод virtual bool isOveersize() из класса publication. Что не так ? #include "stdafx.h" #include <string> #include...

19
Nuqlear
5 / 5 / 0
Регистрация: 05.11.2011
Сообщений: 17
08.04.2013, 12:55 #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
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <math.h>
using namespace std;
 
class Matematica
{
public:
    virtual void matem(int x, int y)
    {
        cout << x << " " << y << endl;
    }
};
 
class Umn: public Matematica
{
public:
    void matem(int x, int y)
    {
        cout << x * y << endl;
    }
};
 
class Del: public Matematica
{
public:
    void matem(int x, int y)
    {
        cout << x / y << endl;
    }
};
 
int main()    
{
    Matematica *x=new Matematica();
    x->matem(5,4);
    delete x;
    x=new Umn();
    x->matem(5,4);
    delete x;
    x=new Del();
    x->matem(5,4);
    delete x;
}
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.04.2013, 12:58 #3
Nuqlear, Деструктор у базового класса должен быть виртуальный, иначе UB.
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.04.2013, 13:00 #4
Цитата Сообщение от Nuqlear Посмотреть сообщение
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
#include <iostream>
#include <math.h>
using namespace std;
 
class Matematica
{
public:
    virtual void matem(int x, int y)
    {
        cout << x << " " << y << endl;
    }
};
 
class Umn: public Matematica
{
public:
    void matem(int x, int y)
    {
        cout << x * y << endl;
    }
};
 
class Del: public Matematica
{
public:
    void matem(int x, int y)
    {
        cout << x / y << endl;
    }
};
 
int main()    
{
    Matematica *x=new Matematica();
    x->matem(5,4);
    delete x;
    x=new Umn();
    x->matem(5,4);
    delete x;
    x=new Del();
    x->matem(5,4);
    delete x;
}
обьясните пожалуйста для чего нужны виртуальные функции.
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.04.2013, 13:33 #5
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
49
50
#include <iostream>
 
class Matematica
{
public:
    Matematica() {}
    Matematica(const Matematica&) {}
    virtual ~Matematica() {}
 
    virtual void matem(int x, int y) { std::cout << "x: "
        << x << "; y: " << y << '\n'; }
};
 
class Umn : public Matematica
{
public:
    Umn() {}
    Umn(const Matematica&) {}
    ~Umn() {}
 
    void matem(int x, int y) { std::cout << "x * y = " << x * y << '\n'; }
};
 
class Del : public Matematica
{
public:
    Del() {}
    Del(const Del&) {}
    ~Del() {}
 
    void matem(int x, int y) { std::cout << "x / y = " << x / y << '\n'; }
};
 
int main()
{
    Matematica* b_ptr, m_obj;
    Umn u_obj;
    Del d_obj;
 
    b_ptr = &m_obj;
    b_ptr->matem(6, 2);
 
    b_ptr = &u_obj;
    b_ptr->matem(6, 2);
 
    b_ptr = &d_obj;
    b_ptr->matem(6, 2);
 
    return 0;
}
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.04.2013, 13:45 #6
xtorne21st, Конструкторы копирования да и деструкторы везде кроме базового класса нафиг не нужны ( а в базовом стоит оставить только деструктор, да фукнцию ).
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.04.2013, 13:48 #7
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    Umn() {}
    Umn(const Matematica&) {}
    ~Umn() 
//....
    Del() {}
    Del(const Del&) {}
    ~Del() {}
}
а почему используется два конструктора, а не один?
0
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,890
Записей в блоге: 3
Завершенные тесты: 1
08.04.2013, 13:50 #8
programina, Виртуальные функции нужны для позднего связывания.

Добавлено через 2 минуты
Второй конструктор, который принимает константную ссылку на объект такого же класса, это конструктор копирования.
1
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.04.2013, 13:59 #9
Пример можно порезать и сделать несколько короче.

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
#include <iostream>
 
class Matematica
{
public:
    virtual ~Matematica() {}
 
    virtual void matem(int x, int y) { std::cout << "x: "
        << x << "; y: " << y << '\n'; }
};
 
class Umn : public Matematica
{
public: 
    void matem(int x, int y) { std::cout << "x * y = " << x * y << '\n'; }
};
 
class Del : public Matematica
{
public:
    void matem(int x, int y) { std::cout << "x / y = " << x / y << '\n'; }
};
 
void invoke(Matematica* m, int x, int y)
{
   m->matem(x, y);
}
 
int main()
{
    Matematica m_obj;
    Umn u_obj;
    Del d_obj;
    invoke(&m_obj, 6, 2);
    invoke(&u_obj, 6, 2);
    invoke(&d_obj, 6, 2);
 
    return 0;
}
2
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.04.2013, 14:00 #10
ForEveR, ну это я для того сделал, чтоб явно указать что "ничего не напутал и не забыл". и можете пожалуйста расшифровать аббревиатуру UB.
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.04.2013, 14:00 #11
Цитата Сообщение от Croessmah Посмотреть сообщение
programina, Виртуальные функции нужны для позднего связывания.
то есть для того чтобы программа во время исполнения определяла какую операцию нужно выполнить, поделить или умножить?
Если да, то зачем, ведь можно сделать две разные функции для умножения и деления?
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.04.2013, 14:01 #12
xtorne21st, undefined behaviour, ака неопределенное поведение.
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.04.2013, 14:03 #13
ForEveR, ну и если на то пошло виртуальный деструктор конкретно в этом примере тоже вещь опциональная
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.04.2013, 14:04 #14
xtorne21st, Конкретно в данном - да. Согласен.)
0
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,890
Записей в блоге: 3
Завершенные тесты: 1
08.04.2013, 14:04 #15
programina, почитайте про полиморфизм
1
08.04.2013, 14:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2013, 14:04
Привет! Вот еще темы с ответами:

Виртуальная функция - C++
Всем доброго времени суток! Прошу помочь с одной проблемой. Собственно, вот программа: #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Чистая виртуальная функция - C++
Скажите, может ли чистая виртуальная функция иметь тело? В книге написано что может, но не написано как. Пытался сам определить по-разному...

Виртуальная функция, полиморфизм - C++
Добавить виртуальную функцию.Продемонстрировать полиморфизм. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; ...

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


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

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

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