Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

08.06.2015, 14:57. Просмотров 415. Ответов 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;
}
И еще маленький вопрос, стоит все разделять на файлы? в данном случае считаю что не особо важно, тк программы еще маленькие и это того не стоит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2015, 14:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается разобраться с абстрактными классами (C++):

Помогите разобраться с классами начинающему - Visual C++
я хочу сделать такую 'штуку', чтобы при нажатии мышкой на статический текст или например картинку, а также при перемещении по нему мышки...

Проблема с абстрактными классами и перегрузкой операторов - C++
добрый день. в общем ситуация такая: есть несколько классов, наследуемых от абстрактного класса. Нужно реализовать чтобы можно было...

Помогите разобраться с классами в C++ - C++
Есть задание по ООП С++ Используя классы создать кольцо.Записи кольца включают в себя указатели на очередь, содержащую указатели на на...

Помогогите разобраться с классами - C++
Прошу доступно объяснить: частные и общие данные, конструктор, деструктор, перегрузка операторов, наследование, на основе этого кода....

Не могу разобраться с классами - C++
InitD3DWindow.h ------------------- class InitD3DWindow { protected: //Initialize the app Window bool InitWindow();

Попытка разобраться с классами в C++ - C++
Доброго времени суток Читаю книгу Дейтел С++ дошел до классов и в первом же упражнении впал в ступор Помогите кто чем сможет Текст...

2
yarko
64 / 64 / 16
Регистрация: 31.03.2015
Сообщений: 253
08.06.2015, 15:04 #2
Ругается, потому что не может найти реализацию конструктора. Он обьявлен, но не реализован.
0
Alexander273
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 13
08.06.2015, 15:20  [ТС] #3
Спасибо, решение нашел, но если будет воззможность кто-нибудь ответьте на другие вопросы
)))пользовался простоа втоматическим коснтруктором)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2015, 15:20
Привет! Вот еще темы с ответами:

Не могу разобраться с функциями и классами - C++
Уважаемые гуру! Подскажите, пожалуйста, мне такой вопрос. Пишу небольшое консольное приложение-игру. Есть у меня класс Character, с...

Не могу разобраться с классами и освобождением памяти - C++
Есть задача. Создать класс матрица Данный класс содержит указатель на float, размер строк и столбцов и состояние ошибки. Определить...

Не получается разобраться с массивами - C++
Учу С++,остановился на массивах и строках и почему-то не получается решать,не могу понять.Особенно проблемы возникают с двумерным...

Не получается разобраться с конструктором копирования - C++
Вот начала разбираться с конструктором копирования. но я чёт запуталась с ним. Можете помочь? #ifndef PEOPLE_H #define PEOPLE_H ...


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

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

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