Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 10
1

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

29.12.2011, 15:49. Просмотров 1120. Ответов 7
Метки нет (Все метки)


Задача:
В классе хранится целое, и определяется виртуальная функция 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;}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2011, 15:49
Ответы с готовыми решениями:

Виртуальные и чисто виртуальные функции
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто...

Виртуальные функции
Доброго времени суток. Есть задание. Создать абстрактный класс Function (функция) с виртуальными...

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

виртуальные функции
сделать какой либо из методов класса виртуальным #include&lt;iostream.h&gt; #include&lt;stdio.h&gt; class...

7
Полярный
475 / 447 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
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;
}
0
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 10
29.12.2011, 16:00  [ТС] 3
прошу прощения за некорректные вопросы!...
объяснения начать можно вот с этого:
C++
1
outhex(int n):num(n){}
( что это такое и для чего используется)
0
15 / 15 / 8
Регистрация: 01.09.2011
Сообщений: 65
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;}
0
Полярный
475 / 447 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
29.12.2011, 16:06 5
C++
1
outhex(int n):num(n){}
outhex(int n) - конструктор.
num(n) - это значит, что вызывается конструктор базового класса num.

PS Следовало бы вам засунуть int i; базового класса в private, а то как-то не по человечески получается, но к этому думаю потом вернемся.
0
В астрале
Эксперт С++
8030 / 4787 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
29.12.2011, 16:18 6
dimcoder, В protected тогда уж, если такой интерфейс как ТС сделал поддерживать.
0
Полярный
475 / 447 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
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 в остальных классах под себя.
0
В астрале
Эксперт С++
8030 / 4787 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
29.12.2011, 16:29 8
dimcoder, Ну может хоть virtual тогда?
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2011, 16:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

виртуальные функции
ввести виртуальную функцию class A { void init(); } classB:A { void init(); }

Виртуальные функции
Здрасте! вот задачка, какбэ сделал, но нужны виртуальные функции. даже не знаю как их сделать. ...

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

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


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

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

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