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

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

Восстановить пароль Регистрация
 
1ive
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 10
29.12.2011, 15:49     Виртуальные функции С++ #1
Задача:
В классе хранится целое, и определяется виртуальная функция shownum(). Создать 2 производных класса, наследующие класс num. В производных классах переопределить shownum(), так чтобы выводить число в шестнадцатеричной и восьмеричной системах исчисления.
Вот сама программа.
Объясните пожалуйста как эта программа работает и почему выводит число 24??(можно с коментариями)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
class num{
public:
    int i;
    num(int x){i=x;}
    virtual void shownum() {cout<<i<<"\n";}};
    class outhex:public num{
    public:
        outhex(int n):num(n){}
        void shownum(){cout<<hex<<i<<"\n";}};
        class outoct:public num{
        public:
            outoct(int n):num(n){}
            void shownum(){cout<<oct<<i<<"\n";}};
            int main()
            {outhex h(10);
            outoct o(20);
            o.shownum();
            return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2011, 15:49     Виртуальные функции С++
Посмотрите здесь:

C++ Виртуальные функции
C++ Виртуальные функции
C++ Виртуальные функции
C++ Виртуальные функции
Виртуальные функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
29.12.2011, 15:56     Виртуальные функции С++ #2
Цитата Сообщение от 1ive Посмотреть сообщение
Объясните пожалуйста как эта программа работает и почему выводит число 24??
Объяснить конкретно что?
Форматируйте пожалуйста код, читать невозможно, ну хотя бы так:
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
#include <iostream>
 
class num
{
public:
   int i;
   num(int x){i=x;}
   virtual void shownum() {cout<<i<<"\n";}
};
 
class outhex:public num
{
   public:
   outhex(int n):num(n){}
   void shownum(){cout<<hex<<i<<"\n";}
};
 
class outoct:public num
{
   public:
   outoct(int n):num(n){}
   void shownum(){cout<<oct<<i<<"\n";}
};
 
int main()
{
   outhex h(10);
   outoct o(20);
   o.shownum();
   return 0;
}
1ive
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 10
29.12.2011, 16:00  [ТС]     Виртуальные функции С++ #3
прошу прощения за некорректные вопросы!...
объяснения начать можно вот с этого:
C++
1
outhex(int n):num(n){}
( что это такое и для чего используется)
cyberobot
 Аватар для cyberobot
15 / 15 / 1
Регистрация: 01.09.2011
Сообщений: 66
29.12.2011, 16:03     Виртуальные функции С++ #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
class num{
public:
        int i;
        num(int x){i=x;}
        virtual void shownum() {cout<<i<<"\n";}};
        class outhex:public num{
        public:
                outhex(int n):num(n){}
                void shownum(){cout<<hex<<i<<"\n";}};
                class outoct:public num{
                public:
                        outoct(int n):num(n){}
                        void shownum(){cout<<oct<<i<<"\n";}};
                        int main()
                        {outhex h(10); //10-в десятичной системе
                        outoct o(20); //20 в десятичной системе
                        o.shownum(); //перевод 20 в десятичной системе в восьмеричную систему. 20 в десятичной системе - 24 в восьмеричной системе
                        return 0;}
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
29.12.2011, 16:06     Виртуальные функции С++ #5
C++
1
outhex(int n):num(n){}
outhex(int n) - конструктор.
num(n) - это значит, что вызывается конструктор базового класса num.

PS Следовало бы вам засунуть int i; базового класса в private, а то как-то не по человечески получается, но к этому думаю потом вернемся.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.12.2011, 16:18     Виртуальные функции С++ #6
dimcoder, В protected тогда уж, если такой интерфейс как ТС сделал поддерживать.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
29.12.2011, 16:27     Виртуальные функции С++ #7
Нда, интерфейсу не позавидуешь. А вообще я бы базовый класс так написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include <conio.h>
 
class num
{
public:
 
   num(int x){setNum(x);}
 
   virtual void setNum(int x) {i = x;}
 
   virtual int getNum() {return i;}
 
   virtual void showNum {cout<<i<<"\n";}
 
private:
 
   int i;
};
Теперь осталось переопределять функцию setNum в остальных классах под себя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2011, 16:29     Виртуальные функции С++
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.12.2011, 16:29     Виртуальные функции С++ #8
dimcoder, Ну может хоть virtual тогда?
Yandex
Объявления
29.12.2011, 16:29     Виртуальные функции С++
Ответ Создать тему
Опции темы

Текущее время: 16:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru