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

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

Войти
Регистрация
Восстановить пароль
 
InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
#1

виртуальные функции - C++

11.12.2013, 15:09. Просмотров 205. Ответов 1
Метки нет (Все метки)

Добрый день. Начал изучать виртуальные функции и столкнулся с проблемой. Не могу перегрузить функцию. Объясните что не так и как нужно:
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Bass
{
    public:
        virtual int fun(int K)
        {
            x=1+K;
            return x;
        }
    private: int x;
};
 
class Bass2:public Bass
{
    public:
        virtual int fun(int K, int T)
        {
            x=1+K+T;
            return x;
        }
    private: int x;
};
 
 
    int main()
 
    {
                
        Bass *p;
        Bass obj;
        Bass2 obj2;
        cout<<p->fun(1);
        p=&obj2;
        cout<<p->fun(1,1);
        return 0;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2013, 15:09     виртуальные функции
Посмотрите здесь:

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

виртуальные функции - C++
C++ подскажите пожалуста на словах код писать ненадо. как преопределить функцию virtual Print(). Создать абстрактный базовый класс...

Виртуальные функции - C++
Создайте класс Word, определите в нем виртуальную функцию-член word_main(*char x), которая выводит на экран фразу: “Я знаю слово x”....

Виртуальные функции - C++
Здрасте! вот задачка, какбэ сделал, но нужны виртуальные функции. даже не знаю как их сделать. #include &lt;iostream.h&gt; #include...

Виртуальные функции С++ - C++
Задача: В классе хранится целое, и определяется виртуальная функция shownum(). Создать 2 производных класса, наследующие класс num. В...

Виртуальные функции. - C++
Приветствую всех. Дана такая программа (на самом деле она больше и сложнее, но структура и проблема те же): #include &lt;iostream&gt; ...

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

Виртуальные функции в С++ - C++
Здравствуйт. Помогите осмыслить доконца вирт. ф-ции. После прочтения источников я собрал определенную картину: Вирт функции...

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

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

виртуальные функции - C++
Помогите пожалуйста, создать абстрактный класс Shape с двумя чисто виртуальными методами Area() и Print(). Определить производные классы ...

Виртуальные функции - C++
Пытаюсь понять что это такое но не понимаю. Может есть какие то болие понятные примеры , а то то что я смотрел не дало результата. ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
11.12.2013, 16:30     виртуальные функции #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
#include <iostream>
 
class Bass
{
    public:
        virtual int fun(int K)
        {
            x=1+K;
            return x;
        }
    private: int x;
};
 
class Bass2:public Bass
{
    public:
        int fun(int K)//перегруженная базового класса
        {
            x=1+K+100;
            return x;
        }
        
         int fun(int K, int T)//обьявленная новая с таким же именем но другими параметрами
        {
            x=1+K+T;
            return x;
        }
    private: int x;
};
 
 int main()
 {
    Bass b1;
    Bass2 b2;
    
    std::cout << b1.fun(5) << std::endl;//виртуальная ф-я базовый класс
    std::cout << b2.fun(10) << std::endl;//перегруженная функция базового класса 
    std::cout << b2.fun(10,5) << std::endl;//тоже имя ф-ии но другой набор параметров
    
     system("PAUSE");
     return 0;
 }
Добавлено через 2 минуты
Точнее я неправильно сказал вы не затеняеете а просто не реализуете

Добавлено через 54 секунды
Слово virtual не гарантирует того что обязательно нужно перегрузить функцию в классе наследнике.

Добавлено через 1 минуту
Если вы этого не сделаете будет использоваться функция базового класса.
Yandex
Объявления
11.12.2013, 16:30     виртуальные функции
Ответ Создать тему
Опции темы

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