Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Mr. Pyatachok
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250

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

05.08.2012, 16:09. Показов 2697. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Не получается реализовать следующее:
Есть базовый класс Array с полями: массив типа unsigned char и поле для хранения количества элементов у текущего объекта-массива. Реализовать в классе Array виртуальную функцию поэлементного сложения массивов.
Теперь дочерние классы:
Класс Hex содержит число в шестнадцатеричной системе исчисления, при этом оно вводится в виде unsigned char.
Класс Money содержит также число, но в десятичном виде, тоже вводится в виде unsigned char.
Вот мои попытки:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <iostream.h>
#include <conio.h>
const int limit=10;
 
class Array
{        public:
    unsigned int massiv[limit];
    int znachenie,kol;
        public:
    Array();
    Array(int kol,int znachenie);
    ~Array(){};
    virtual void Summa(Array a,Array b);
};
 
class Hex: public Array
{       public:
    unsigned int massiv[limit];
    unsigned char hex[100];
    unsigned int dec;
        public:
    void Set();
    int HexToDec();
    virtual void Summa(Hex a,Hex b);
};
 
class Money: public Array
{       public:
    unsigned int massiv[limit];
    unsigned char money[100];
    unsigned int dec;
        public:
    void Set();
    int CharToDec();
    virtual void Summa(Money a,Money b);
};
//---------------------------------------------------------------------------//
Array::Array(int kol,int znachenie)
{
    for (int i=0; i<((kol>limit)?limit:kol); i++)
        massiv[i]=znachenie;
}
 
Array::Array()
{
    for(int i=0;i<limit;i++)
        massiv[i]=0;
}
 
void Array::Summa(Array a,Array b)
{
    int i;
    Array c;
    for (int i=0; i<((kol>limit)?limit:kol); i++)
    {
        c.massiv[i]=a.massiv[i]+b.massiv[i];
        cout<<c.massiv[i];
    }
}
//---------------------------------------------------------------------------//
 
void Hex::Set()
{
    cin>>hex;
}
 
 
int Hex::HexToDec()
{
    int v;     //вес разряда шестнадцатеричного числа
    int err;   //err==1 - в строке недопустимый символ
    int i;
    err=0;
    strupr(hex); //преобразование введенной строке к верхнему регистру
    dec=0;
    v=1; //вес младшего разряда шестнадцатеричного числа
 
    for (i = strlen(hex)-1; i>=0; i--)
    {
        if (hex[i]>='0' && hex[i]<='9')
        dec+=v*(hex[i]-48);
        else if (hex[i]>='A' && hex[i]<='F')
            dec+=v*(hex[i]-55);
             else
             {
                err=1;
                break;
             }
             v*=16;
    }
    if(!err)
    {
        printf("Shestnadchaterichnomu chislu %s",hex);
        printf(" sootvetstvuet desyatichnoe %u\n",dec);
    }
    else
    {
       printf("Stroka %s ne yavlyaetsya ",hex);
       printf("shestnadchaterichnum chislom\n");
    }
    return dec;
}
 
void Hex::Summa(Hex a,Hex b)
{
    a.HexToDec()+b.HexToDec();
}
//----------------------------------------------------------------------------//
void Money::Set()
{
    cin>>money;
}
 
int Money::CharToDec()
{
    dec=atoi(money);
    return dec;
}
 
void Money::Summa(Money a,Money b)
{
    a.CharToDec()+b.CharToDec();
}
 
int main()
{
    Array array;
    Hex hex;
    Money money;
 
    cout<<"Vvedte kol: ";
    cin>>array.kol;
 
    for (int i=0; i<array.kol; i++)
    {
        cout<<"Insert #"<<i<<" of massiv ";
        hex.Set();
        hex.HexToDec();
 
    }
    for (int i=0; i<array.kol; i++)
    {
        cout<<"Insert #"<<i<<" of massiv ";
        money.Set();
        money.CharToDec();
    }
    array.Summa(hex,money);
 
    getch();
    return 0;
}
Как видно из сие г*кода, у меня сложилось впечатление, что необходимо для класса Hex ввести числа, затем их перевести в десятичный вид, затем все их кинуть в массив (а с этим у меня проблема).
Для класса Money ввсети числа, перевести в десятичнй вид, затем аналогично кинуть в массив. Только потом применить переопределенную виртуальную функцию.
Помогите задуманное реализовать, заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2012, 16:09
Ответы с готовыми решениями:

Виртуальные и чисто виртуальные функции
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто виртуальную? #include &lt;iostream&gt; using...

Возврат указателя на строку из фукнции
Снова я пришел к вам со строками. Читаю &quot;Как программировать на С++&quot; и там везде пишут про инкапсуляцию, сокрытие данных. Так чтоб мы...

Ошибка возврата значения из фукнции
Выдает ошибку push: значение возвращается не при всех путях выполнения #define _CRT_SECURE_NO_WARNINGS #include...

3
8 / 5 / 0
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 14: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
class Array
{        public:
    unsigned int massiv[limit];
    int znachenie,kol;
        public:
    Array();
    Array(int kol,int znachenie);
    ~Array(){};
    virtual void Summa(Array a,Array b);
};
 
class Hex: public Array
{       public:
    unsigned int massiv[limit];
    unsigned char hex[100];
    unsigned int dec;
        public:
    void Set();
    int HexToDec();
    virtual void Summa(Array a, Array b);
};
 
class Money: public Array
{       public:
    unsigned int massiv[limit];
    unsigned char money[100];
    unsigned int dec;
        public:
    void Set();
    int CharToDec();
    virtual void Summa(Array a, Array b);
};
Если перегружать функцию, то в ней полностью должны совпадать тип, название и параметры.
0
2393 / 1921 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
06.08.2012, 14:50
По поводу наследования, у вас есть перекрытие имён, что не правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Array
{        public:
    unsigned int massiv[limit];
// ...
};
 
class Hex: public Array
{       public:
    unsigned int massiv[limit];
// ...
};
 
class Money: public Array
{       public:
    unsigned int massiv[limit];
// ...
};
Судя по всему, этот massiv должен быть объявлен только в базовом классе Array, а из потомков его нужно убрать.
0
8 / 5 / 0
Регистрация: 30.03.2012
Сообщений: 14
06.08.2012, 15:46
Я вот вообще не понял зачем там виртуальная функция - набросал без нее работает вроде как. Уточни задание если что.

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
const int cLimit = 10;
 
class Array
{
public:
    Array();
    ~Array() {};
public:
    unsigned int m_aData[cLimit];
    unsigned int m_nCurSize; //Number of elements
public:
    void Summ(Array a, Array b);
};
 
Array::Array()
{
    m_nCurSize = 0;
}
 
void Array::Summ(Array a, Array b)
{
    for (unsigned int i = 0; i < m_nCurSize; i++)
    {
        m_aData[i] = a.m_aData[i] + b.m_aData[i];
    }
}
 
class Hex : public Array
{
public:
    bool Set(char* pHex)
    {
        //Decimal
        if (m_nCurSize >= cLimit)
            return false;
        char* pEnd = NULL;
        m_aData[m_nCurSize] = strtol(pHex, &pEnd, 16);
        m_nCurSize++;
        return true;
    }
};
 
class Money : public Array
{
public:
    bool Set(unsigned int nElement)
    {
        //Decimal
        if (m_nCurSize >= cLimit)
            return false;
        m_aData[m_nCurSize] = nElement;
        m_nCurSize++;
        return true;
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    Array aRes;
    Money aDec;
    Hex aHex;
 
    unsigned int nSize = 0;
    cout << "Enter size" << endl;
    cin >> nSize;
    
 
    cout << "Enter dec elements:" << endl;
    unsigned int nElement = 0;
    for (unsigned int i = 0; i < nSize; i++)
    {
        cin >> nElement;
        aDec.Set(nElement);
    }
 
    cout << "Enter hex elements:" << endl;
    char* pElement = NULL;
    for (unsigned int i = 0; i < nSize; i++)
    {
        pElement = new char();
        cin >> pElement;
        aHex.Set(pElement);
    }
 
    aRes.m_nCurSize = nSize;
    aRes.Summ(aHex, aDec);
 
    cout << "Summ of elements:" << endl;
    for (unsigned int i = 0; i < nSize; i++)
    {
        cout << aRes.m_aData[i] << endl;
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.08.2012, 15:46
Помогаю со студенческими работами здесь

Исключения, возвращающие данные из фукнции
исключенеия возвращающие данные из фукнции допустим есть контейнер exc_vector, который бросает исключения при обращении к...

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

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

Виртуальные функции
Разработать программу с использованием наследования классов, реализующую классы: Земноводное(ареал обитания)-&gt;Крокодил(род, длина,...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru