Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 22.03.2011
Сообщений: 17

Задание по наследованию классов

22.03.2011, 21:50. Показов 5599. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать иерархию классов : линия - прямоугольник - пирамида. Все классы должны содержать методы для фиксации и получения значений всех координат, а производные классы методы вычисления площади (прямоугольник), площади поверхности и объема (пирамида).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//line.h
#include <conio.h>
#define LINE_h
#ifndef LINE_h1
 
class line
{
public:
int x,y;
int a1, a2, b1, b2;
public:
void getLine();
void showLine();
};
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//line.cpp
#include <conio.h>
#include <iostream.h>
#include "F:\\1\line.h"
 
void line::getLine()
{
cout << "Inp. x and y coordinates A(x, y): x ->";
cin >> x; cout << " y->"; cin >> y;
a1 = x; b1 = y;
cout << "\nInp. x and y coordinates B(x, y): x ->";
cin >> x; cout << " y->"; cin >> y;
a2 = x; b2 = y;
}
 
void line::showLine()
{
cout << "\nLine with coordinates: A(" << a1 << ";" << b1 << ") B(" << a2 << ";" << b2 << ") has been created.";
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//rect.h
#include <conio.h>
#include "line.h"
#define RECT_h
#ifndef RECT_h1
 
class rect : public line
{
public:
int a1, b1, a2, b2, a3, b3, a4, b4;
void getRect();
void showRect();
void squareRect();
};
 
#endif
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
//rect.cpp
#include <conio.h>
#include <iostream.h>
#include "F:\\1\rect.h"
 
void rect::getRect()
{
cout << "Inp. x and y coordinates A(x, y): x->";
cin >> x; cout <<" y->"; cin >> y;
a1 = x; b1 = y;
cout << "Inp. x and y coordinates B(x, y): x->";
cin >> x; cout <<" y->"; cin >> y;
a2 = x; b2 = y;
cout << "Inp. x and y coordinates C(x, y): x->";
cin >> x; cout <<" y->"; cin >> y;
a3 = x; b3 = y;
cout << "Inp. x and y coordinates D(x, y): x->";
cin >> x; cout <<" y->"; cin >> y;
a4 = x; b4 = y;
}
 
void rect::showRect()
{
cout << "Rectangle with coordinates: A(" << a1 << ";" << b1 << ") B(" << a2 << ";" << b2
<< ") C(" << a3 << ";" << b3 << ") D(" << a4 << ";" << b4 << ") has been created.";
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
//drvRect
#include <conio.h>
#include <iostream.h>
#include "rect.h"
 
void main()
{
rect r;
r.getRect();
r.showRect();
getch();
}
Возникают ошибки:
[ILINK32 Error] Error: Unresolved external 'rect::getRect()' referenced from F:\путь\SOURCE\DEBUG\WIN32\DRVRECT.OBJ
[ILINK32 Error] Error: Unresolved external 'rect::showRect()' referenced from F:\путь\SOURCE\DEBUG\WIN32\DRVRECT.OBJ
Помогите исправить.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2011, 21:50
Ответы с готовыми решениями:

Задание на создание классов
Дорогие коллеги! Помогите новичку разобраться с этим заданием! Задание на создание классов Данное задание предполагает создать базовый...

Наследование классов. Недопонимаю задание
У меня есть класс, который может работать с полином. Есть задание: Класс для pаботы с многочленами. Создать наследников класса: ...

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

9
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,858
22.03.2011, 22:51
там точно наследование???
по моему они совершенно разные
может быть использование
тогда
класс линия
содержит
координаты начала(тоже можно отдельный класс)
координаты конца
класс прямоугольник
содержит
4 линии
класс пирамида
содержит
6 прямоугольников

Добавлено через 21 минуту
ну если наследование то может так
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
class line
{
public:
int x1,x2,y1,y2;//координаты начала конца
line();// конструктор для инициализации коодинат (у тебя нету)
virtual show();// рисование пригодится в классах наследниках
}
class rect : public line
{
public:
rect();// конструктор
int  x3,x4,y3,y4;// координаты двух вершин (две в линии)
virtual show();//рисование
virtual square(); // площадь пригодится потом
}
class Piramid: public rect
{
public:
Piramid()// конструктор
int x5,x6;// координаты вершины
virtual show();// рисование
virtual square(); // площадь
obem(); // вычисление объема не помню по аглицки
}
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
22.03.2011, 23:00
Цитата Сообщение от Recew Посмотреть сообщение
#define LINE_h
#ifndef LINE_h1
А это для чего? Если, как мне кажется, для избежания повторного включения в объектник, то сделано неверно. Макроимя LINE_h1 нигде не объявлено в рамках приведенного кода. И исходя из того, что #endif закрывает код под условием наличия макроимени LINE_h1, то что линковщик не видит код вполне законно. Попробуйте так:
C++
1
2
3
4
#ifndef LINE_H
#define LINE_H
//code
#endif
1
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
23.03.2011, 00:57
ValeryS
объема не помню по аглицки
- volume

класс пирамида содержит 6 прямоугольников
Это как? О_о
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,858
23.03.2011, 01:02
сглупил

Добавлено через 1 минуту
попутал с параллепипедом
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
23.03.2011, 01:09
В некоторой степени ValeryS прав.
Естественней смотрелось бы такое наследование:
линия - прямоугольник - параллелепипед
или такое:
линия - треугольник - пирамида
Recew, может чего напуталось в задании?
0
3 / 3 / 1
Регистрация: 22.03.2011
Сообщений: 17
23.03.2011, 17:39  [ТС]
Цитата Сообщение от IrineK Посмотреть сообщение
Recew, может чего напуталось в задании?
Нет, задание верное.

Вот в чем была ошибка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
//drvRect
#include <conio.h>
#include <iostream.h>
#include "rect.cpp"//а не rect.h
 
void main()
{
rect r;
r.getRect();
r.showRect();
getch();
}
Что-ж буду разбираться дальше, если возникнут трудности - обращусь.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,858
23.03.2011, 21:57
это не главная ошибка
главная в том что ты не правильно наследуешь классы
примерную схему наследования я накидал
ты наследуешь класс прямоугольник от класса линия,но ничего от него не берешь
переопределил все функции все поля. Зачем тогда наследовать?
принцип наследования
создается базовый класс с какими-то параметрами
класс наследник имеет все что имеет базовый класс +какие то свои параметры
наследник наследника добавляет свое и т.д.
вот так и создается иерархия классов
а ты каждый класс описываешь заново
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
24.03.2011, 00:03
Вообще-то наследование - это отношение: "is a..."
Является ли треугольник (прямоугольник) линией? - нет. Является ли пирамида треугольником? - нет.

Здесь другое отношение - "has a...". Это вложение (embedded objects).
Линия -> Треугольник содержит 3 линии -> Пирамида (треугольная) содержит 4 треугольника

Я тут набросала. Линию сделала направленной (вектор), в будущем пригодится. Удобно площади считать.

Здесь линия (вектор) и треугольник:
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
#include <iostream>
#include <math.h>
using namespace std;
 
class Vector
{
private: 
    double _xA,_yA,_xB,_yB;
    double _dX,_dY;
    
public:
    Vector(double xA, double yA, double xB, double yB):
      _xA(xA),_yA(yA),_xB(xB),_yB(yB),_dX(xB-xA),_dY(yB-yA){} 
    Vector():_xA(0),_yA(0),_xB(0),_yB(0),_dX(0),_dY(0) {}
    ~Vector(){}
 
    void SetVector(double xA, double yA, double xB, double yB)
    {   _xA=xA;_yA=yA;_xB=xB;_yB=yB;
        _dX = xB-xA; _dY = yB-yA;
    }
 
    double GetVectorDX(){return _dX;}
    double GetVectorDY(){return _dY;}
        
    Vector &operator =(Vector& MN)
    {   if(&MN!=this)
        {   _xA=MN._xA;
            _yA=MN._yA;
            _xB=MN._xB;
            _yB=MN._yB;
            _dX=MN._dX;
            _dY=MN._dY;
        }
        return *this;
    }
 
    double Length()
    {   return sqrt(_dX*_dX + _dY*_dY);
    }
 
    friend double ScalarProduct(Vector &a, Vector &b)
    {   return a._dX*b._dX+a._dY*b._dY;
    }
 
    friend double Angle(Vector &a, Vector &b)
    {   return acos(ScalarProduct(a,b)/(a.Length()*b.Length()));
    }
 
};
 
 
class Triangle
{
private:
    Vector _AB,_AC,_BC;
 
public:
        Triangle(double xA, double yA, double xB, double yB, double xC, double yC):
            _AB(xA,yA,xB,yB), _AC(xA,yA,xC,yC), _BC(xB,yB,xC,yC){}
        Triangle():_AB(0,0,0,0),_AC(0,0,0,0), _BC(0,0,0,0) {}
        ~Triangle(){}
 
    void SetTriangle(double xA, double yA, double xB, double yB, double xC, double yC)
    {   Vector AB(xA,yA,xB,yB);
        Vector AC(xA,yA,xC,yC);
        Vector BC(xB,yB,xC,yC);
        _AB = AB;
        _AC = AC;
        _BC = BC;
        bool find = this->FoundErr();
    }
 
    bool FoundErr()
    {   double a =_BC.Length(),b = _AC.Length(),c = _AB.Length();
        if(a*b*c==0)
        {   cout<<"ERROR: zero side\n";
            return true;
        }
        else if(a+b<=c || a+c<=b || b+c<=a)
        {   cout<<"ERROR: one side too long\n";
            return true;
        }
        return false;
    }
 
    double Square()
    {   bool find = this->FoundErr();
        if(!find)
            return 0.5*fabs(_AB.GetVectorDX()*_AC.GetVectorDY()-_AC.GetVectorDX()*_AB.GetVectorDY());
        return 0;
    }
 
    bool isRectangular()
    {   bool find = this->FoundErr();
        if(!find)
            if(ScalarProduct(_AB,_AC)==0 || ScalarProduct(_AB,_BC)==0 
                || ScalarProduct(_BC,_AC)==0) return true;
        return false;
    }
 
    bool isEquilateral()
    {   bool find = this->FoundErr();
        if(!find)
        {
            if(_AB.Length()==_AC.Length() && _AC.Length()==_BC.Length()) return true;
        }
        return false;
    }
 
    bool isIsosceles()
    {   bool find = this->FoundErr();
        if(!find)
            if(_BC.Length()==_AC.Length() || _BC.Length()==_AB.Length() 
                || _AC.Length()==_AB.Length()) return true;
        return false;
    }
};
 
int main()
{   Vector L0;
    cout<<"Length of 0 vector: "<<L0.Length()<<endl;
    L0.SetVector(1,1,5,5);
    cout<<"Length of set vector: "<<L0.Length()<<endl;
 
    Vector L1(1,1,-5,-5);
    cout<<"Scalar Product: "<<ScalarProduct(L0,L1)<<endl;
    cout<<"Angle (Pi): "<< Angle(L0,L1)<<endl;
 
    Triangle T0;
    cout<<"Square of 0 triangle: "<<T0.Square()<<endl;
    T0.SetTriangle(5,0,0,5,0,0);
    cout<<"Square of set triangle T0: "<<T0.Square()<<endl;
    cout<<"Is rectangular: "<<T0.isRectangular()<<endl;
    cout<<"Is isosceles: "<<T0.isIsosceles()<<endl;
    cout<<"Is Equilateral: "<<T0.isEquilateral()<<endl;
 
    Triangle T1(1,1,5,5,9,1);
    cout<<"\nSquare of another triangle T1: "<<T1.Square()<<endl;
    cout<<"Is rectangular: "<<T1.isRectangular()<<endl;
    cout<<"Is isosceles: "<<T1.isIsosceles()<<endl;
    cout<<"Is Equilateral: "<<T1.isEquilateral()<<endl;
    
    cin.get();
    return 0;
}
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,858
24.03.2011, 00:08
я про это и писал в первом сообщении
наследование притянуто за уши
но это на совести того кто составляет такие задания
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2011, 00:08
Помогаю со студенческими работами здесь

Задача по наследованию классов
Ув. Форумчане, помогите, пожалуйста решить задачу про наследование классов. Я саму суть задачи не пойму. Плиз, помогите разобраться...

Задачка по наследованию классов
Вот само задание:https://stepik.org/lesson/24462/step/7?unit=6768 Вот мой код: # Заполнение массива n = int(input()) d = {} ...

Задание на наследование классов
Делаю потиху задания из решебника и это на третьем пункте меня выбило немного из колеи. Создать объект класса Котёнок, используя...

Простое задание с применением классов
Модифицировать и дополнить программу созданную при выполнении лабораторной работы №1: • предоставить спецификатор доступа private двум,...

Задание по иерархии классов в Visual Basic 6.0
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: установку состояния объекта, просмотр...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru