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

C++

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

Не получается разобраться с абстрактными классами - C++

08.06.2015, 14:57. Просмотров 317. Ответов 2
Метки нет (Все метки)

Всем привет, у меня пара вопросов, не получается почему скомпилить файл. Ругается, видимо что то не понимаю до конца с абстрактными классами. Подскажите пожалуйста как реализовать, и почему он может ругаться? а то выдает что undefined reference to Numbers::Numbers().
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
152
153
154
155
156
157
158
159
160
161
162
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <ctime>
 
using namespace std;
 
class Numbers
{
public:
    Numbers();
    ~Numbers();
    virtual void ShowNumbers()=0;
};
 
 
class Pairs : public Numbers
{
friend istream& operator>> (istream&in, Pairs &P);
friend ostream& operator<< (ostream&out, Pairs &P);
friend void operator==(Pairs &P1, Pairs &P2);
public:
void ShowNumbers()
{
    cout << "Пара:\n"
         << FirstNum << "\t" << SecondNum;
}
protected:
    int FirstNum;
    int SecondNum;
};
 
void operator== (Pairs &P1, Pairs &P2)
{
if ((P1.FirstNum>P2.FirstNum) || ((P1.FirstNum==P2.FirstNum)&&(P1.SecondNum>P2.SecondNum)))
    cout << "Первая пара больше.\n";
if ((P1.FirstNum==P2.FirstNum)&&(P1.SecondNum==P2.SecondNum))
    cout << "Пары равны.\n";
if ((P1.FirstNum<P2.FirstNum) || ((P1.FirstNum==P2.FirstNum)&&(P1.SecondNum<P2.SecondNum)))
    cout << "Вторая пара больше.\n";
}
istream& operator>> (istream&in, Pairs &P)
{
    cout << "Введите первое число: "; in>>P.FirstNum;
    cout << "Введите введите втрое число: "; in>>P.SecondNum;
 
    return in;
}
 
ostream& operator<< (ostream&out, Pairs &P)
{
    return (out<<"\Первое число\t|\tВторое число\n"<<P.FirstNum << "\t|\t" << P.SecondNum);
}
 
 
class FractionPairs : public Pairs
{
friend istream& operator>> (istream&in, FractionPairs &FP);
friend void operator== (FractionPairs &FP1, FractionPairs &FP2);
public:
void ShowNumbers()
{
    cout << "Пара:\n"
         << FirstNum << " " << FirstChisl <<"/"<< FirstZnam << "\t" << SecondNum << " " << SecondChisl <<"/"<< SecondZnam;
}
protected:
    int FirstChisl;
    int FirstZnam;
    int SecondChisl;
    int SecondZnam;
};
 
void operator== (FractionPairs &FP1, FractionPairs &FP2)
{
double dFirstPairWhole1, dFirstPairWhole2;
double dSecondPairWhole1, dSecondPairWhole2;
dFirstPairWhole1=double(FP1.FirstNum)+(double(FP1.FirstChisl)/double(FP1.FirstZnam));
dFirstPairWhole2=double(FP1.SecondNum)+(double(FP1.SecondChisl)/double(FP1.SecondZnam));
dSecondPairWhole1=double(FP2.FirstNum)+(double(FP2.FirstChisl)/double(FP2.FirstZnam));
dSecondPairWhole2=double(FP2.SecondNum)+(double(FP2.SecondChisl)/double(FP2.SecondZnam));
if ((dFirstPairWhole1>dSecondPairWhole1) || ((dFirstPairWhole1==dSecondPairWhole1)&&(dFirstPairWhole2>dSecondPairWhole2)))
    cout << "Первая пара больше.\n";
if ((dFirstPairWhole1==dSecondPairWhole1)&&(dFirstPairWhole2==dSecondPairWhole2))
    cout << "Пары равны.\n";
if ((dFirstPairWhole1<dSecondPairWhole1) || ((dFirstPairWhole1==dSecondPairWhole1)&&(dFirstPairWhole2<dSecondPairWhole2)))
    cout << "Вторая пара больше.\n";
}
 
 
istream& operator>> (istream&in, FractionPairs &FP)
{
    cout << "Первое число:\n";
    cout << "Введите целую часть числа: "; cin >> FP.FirstNum;
    cout << "Введите дробную часть числа:\nЧислитель: "; cin >> FP.FirstChisl;
    cout << "Знаменатель: "; cin >> FP.FirstZnam;
    if (FP.FirstZnam==0)
    {
        cout << "Знаменатель не может быть равен 0.\n";
        cout << "Знаменатель: "; cin >> FP.FirstZnam;
    }
    cout << "Второе число:\n";
    cout << "Введите целую часть числа: "; cin >> FP.SecondNum;
    cout << "Введите дробную часть числа:\nЧислитель: "; cin >> FP.SecondChisl;
    cout << "Знаменатель: "; cin >> FP.SecondZnam;
    if (FP.SecondZnam==0)
    {
        cout << "Знаменатель не может быть равен 0.\n";
        cout << "Знаменатель: "; cin >> FP.SecondZnam;
    }
    return in;
}
 
 
int main()
{
            SetConsoleCP(1251);
            SetConsoleOutputCP(1251);
            Pairs Pair1;
            Pairs Pair2;
            int nInsertPairs, nInsertPairs2;
            cout << "Данная программа сравнивает пары чисел.\n";
            cout << "Введите пары целых чисел:\n";
            for (;;)
            {
            cout << "Ввести пары чисел? 1-да 0-нет. "; cin >> nInsertPairs;
            if (nInsertPairs==0)
            {
                //cout << "\nВсего доброго.\n";
                break;
            }
            cout << "Введите первую пару:\n";
            cin >> Pair1;
            cout << "Введите вторую пару:\n";
            cin >> Pair2;
            cout << "---------------------------------------\n";
            Pair1==Pair2;
            cout << "---------------------------------------\n";
            }
            cout << "Дробные числа:\n";
            for (;;)
            {
            cout << "Ввести пары чисел? 1-да 0-нет. "; cin >> nInsertPairs2;
            if (nInsertPairs2==0)
            {
                cout << "\nВсего доброго.\n";
                break;
            }
            cout << "Введите пары дробных чисел\nВведите первую пару:\n";
            cout << "---------------------------------------\n";
            FractionPairs FPair1;
            FractionPairs FPair2;
            cin >> FPair1;
            cout << "---------------------------------------\nВведите вторую пару:";
            cout << "\n---------------------------------------\n";
            cin >> FPair2;
            cout << "---------------------------------------\n";
            FPair1==FPair2;
            cout << "---------------------------------------\n\n";
            }
    return 0;
}
И еще маленький вопрос, стоит все разделять на файлы? в данном случае считаю что не особо важно, тк программы еще маленькие и это того не стоит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2015, 14:57     Не получается разобраться с абстрактными классами
Посмотрите здесь:

Проблема с абстрактными классами и перегрузкой операторов C++
C++ ООП - не получается разобраться в задании
C++ Помогите разобраться с классами в C++
Visual C++ Помогите разобраться с классами начинающему
Не получается разобраться с кодом (структуры) C++
Не могу разобраться с классами C++
C++ Помогогите разобраться с классами
C++ Не могу разобраться с классами и освобождением памяти
C++ Не могу разобраться с функциями и классами
Попытка разобраться с классами в C++ C++
Не получается разобраться с массивами C++
Не получается разобраться с конструктором копирования C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yarko
64 / 64 / 16
Регистрация: 31.03.2015
Сообщений: 253
08.06.2015, 15:04     Не получается разобраться с абстрактными классами #2
Ругается, потому что не может найти реализацию конструктора. Он обьявлен, но не реализован.
Alexander273
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 13
08.06.2015, 15:20  [ТС]     Не получается разобраться с абстрактными классами #3
Спасибо, решение нашел, но если будет воззможность кто-нибудь ответьте на другие вопросы
)))пользовался простоа втоматическим коснтруктором)
Yandex
Объявления
08.06.2015, 15:20     Не получается разобраться с абстрактными классами
Ответ Создать тему
Опции темы

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