0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 9
1

Базовый класс "многоугольник" и производные классы "треугольник" и "прямоугольник"

06.04.2017, 14:48. Показов 10769. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять как реализовать данное задание.

Создать 1 базовый класс и несколько производных.Все небольшие ф-ии сделать встроенными (особенно конструк-
торы). В производных классах определить уникальные функции и/или свойства (свойство – это переменная-член данного
класса). Для всех классов реализовать работу с их объектами (ввод/вывод всех данных). // тут все понятно.

Базовый класс – многоугольник. Производные – треугольник и прямоугольник. // тут не очень

В производных классах допустим функции - нахождение площади или периметра. А вот как сам класс реализовать не понятно. Есть конечно предположение что в классе - цвет, а в производном стороны и площадь, но это как то стремно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2017, 14:48
Ответы с готовыми решениями:

Опишите базовый класс "Многоугольник" и производные классы: ромб, прямоугольник, квадрат, шестиугольник
Опишите базовый класс "Многоугольник" и производные классы: ромб, прямоугольник, квадрат,...

Базовый класс Фигура, производные классы Окружность, Прямоугольник, Ромб
Подскажите верно ли сделана эта программа #include "stdafx.h" #include "iostream" using...

Создать базовый класс – фигура, и производные классы: круг, прямоугольник, трапеция
Общие требования к заданию Создать базовый класс – фигура, и производные классы: круг,...

Базовый класс: фигура на плоскости; Производные классы: окружность, ромб, прямоугольник; Функция: расчет площади фигуры
:help: Помогите решить задачу :help: Базовый класс: фигура на плоскости Производные классы:...

Класс: Создать базовый класс «работник фирмы» и производные классы «стажер», «руководящий сотрудник», «директор»...
Всем привет, помогите пожалуйста, я уже всю голову сломал, не знаю как решить ее... Создать...

14
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.04.2017, 16:16 2
Я вижу эту задачу так. Делаешь родительский класс Многоугольник, а Треугольник и Прямоугольник - это просто будут классы-сыновья и все.
Псевдокод, проверяйте-исправляйте, если есть какие-нибудь ошибки.
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
class Point
{
double x, y;
};
 
class Mnogougolnik
{
public:
int Points;  //Число точек многоугольника
Point *Vertexes;  //Динамический массив вершин много угольника
 
//Конструктор
Mnogougolnik(void)
{
    cout << "Vvedite kolichestvo tochek monogougolnika.";
    cin >> Points;
    Point Vertexes = new Point[Points];
    //Тут нужно заполнить этот массив с консоли или еще откуда-нибудь
}
 
//Деструктор
~Mnogougolnik(void)
{
    delete[] Vertexes;
}
};
 
//Идем дальше, наследуем от Многоугольника классы Треугольник и Прямоугольник
class Triangle: Mnogougolnik: Points(3)  //Так или не так инициализировать переменные, не помню уже:)
{
//Ну и все. Тут будет конструктор с вводом 3-х точек из консоли и все.
}
 
class Rectangle: Mnogougolnik: Points(2) 
{
//А тут будет конструктор с вводом 2-х точек из консоли.
}
Ну и в классах Треугольник и Прямоугольник весь функционал написать: определение периметра, площади и т.д. Также нужно следить чтобы созданные нами переменные не пересекались с системными переменными среды. Т.е. у нас есть Point, я боюсь как бы в C++Builder 6 не оказалось такой же готовой переменной.Что Вы думаете по этому поводу? В какой среде Вы пишете кстати?
1
56 / 50 / 22
Регистрация: 17.03.2014
Сообщений: 143
06.04.2017, 16:24 3
Сделайте красиво: абстрактный класс с чистыми виртуальными функциями и чем-нибудь удобоваримым для всех фигур, например цветом, а в потомках - реализация. Полиморфизм во всей красе.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.04.2017, 16:26 4
Кому-нибудь не трудно будет подсказать что тут за ошибка возникает:URL="http://ideone.com/KON2Vr"]http://ideone.com/KON2Vr[/URL]

Сама ошибка:
Ошибка компиляции time: 0 memory: 0 signal:0
prog.cpp: In constructor ‘Mnogougolnik::Mnogougolnik()’:
prog.cpp:21:22: error: conversion from ‘Point*’ to non-scalar type ‘Point’ requested
Point Vertexes = new Point[Points];
^~~~~~~~~~~~~~~~~(стрелочка под буквой n в new)

Т.е. вроде создаю динимаческий массив, что тут такого-то. Вроде ничего нет особенного - пишет ошибка.
0
Эксперт .NET
5876 / 4753 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
06.04.2017, 16:38 5
Цитата Сообщение от DemolitionMan Посмотреть сообщение
вроде создаю динимаческий массив
А где *?
C++
1
Point *Vertexes = new Point[Points];
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.04.2017, 17:21 6
Не, звездочка тут не нужна, там других косяков полным-полно. Что-то устал я уже видно. В общем констурктор Mnogougolnik нужно переписать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Конструктор
Mnogougolnik(void)
{
    cout << "Vvedite kolichestvo tochek monogougolnika.";
    cin >> Points;
    Vertexes = new TPoint[Points];
    
    for(z = 0; z < Points; z++)
    {
        cout << "\nVvedite " << z+1 << " tochku mnogougolnika: x=";
        cin >> Vertexes[z].x;
        cout << "\ny=";
        cin >> Vertexes[z].y;
    }
}
1
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.04.2017, 17:27 7
Цитата Сообщение от DemolitionMan Посмотреть сообщение
В общем констурктор Mnogougolnik нужно переписать вот так:
Конструктор должен создавать объект по конкретным данным, а не заниматься опросом пользователя транслитерацией.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
06.04.2017, 18:04 8
А что, в Многоугольнике работает опрос пользователя.
Что-то я не пойму почему в Mnogougolnik работает опрос пользователя, а в классах-сыновьях - не работает?
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
//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#include <conio>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
int z;
 
/*
struct Point
{
double x, y;
};
*/
//Тут заменил на TPoint, который стандартный в C++Builder 6.
 
class Mnogougolnik
{
public:
int Points;  //Число точек многоугольника
TPoint *Vertexes;  //Динамический массив вершин многоугольника
 
//Конструктор
Mnogougolnik(int vp, bool zv/*Zadayetsia Vnutri*/)
{
    cout << "Konstructor: Mnogougolnik.\n";
    if(zv)
    {
        cout << "\nVvedite kolichestvo tochek monogougolnika.";
        cin >> Points;
    }
    else
    {
        vp = Points;
    }
    Vertexes = new TPoint[Points];
 
    //Заполнение массива вершин с консоли
    for(z = 0; z < Points; z++)
    {
        cout << "\nVvedite " << z+1 << " tochku mnogougolnika: x=";
        cin >> Vertexes[z].x;
        cout << "\ny=";
        cin >> Vertexes[z].y;
    }
}
 
//Деструктор
~Mnogougolnik(void)
{
    delete[] Vertexes;
}
};
 
//Классы-наследники Triangle и NRectangle
class Triangle: Mnogougolnik  
{
public:
Triangle(void): Mnogougolnik(3, false)
{
    /*
    cout << "\n\nKonstructor: Triangle.\nVvedite koordinati 3 tochek:";
    for(z = 0; z < Points; z++)
    {
        cout << "\nVvedite " << z+1 << " tochku mnogougolnika: x=";
        cin >> Vertexes[z].x;
        cout << "\ny=";
        cin >> Vertexes[z].y;
    }
    */
}
~Triangle(void)
{}
};
 
class NRectangle: Mnogougolnik
{
public:
NRectangle(void): Mnogougolnik(2, false)
{
    /*
    cout << "\n\nKonstructor: NRectangle.\nVvedite koordinati 2 tochek:";
    for(z = 0; z < Points; z++)
    {
        cout << "\nVvedite " << z+1 << " tochku mnogougolnika: x=";
        cin >> Vertexes[z].x;
        cout << "\ny=";
        cin >> Vertexes[z].y;
    }
    */
}
~NRectangle(void)
{}
};
 
 
Mnogougolnik M1(0, true);
Triangle T1;
NRectangle R1;
 
int main(int argc, char* argv[])
{
getch();
return 0;
}
//---------------------------------------------------------------------------
1
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 9
07.04.2017, 05:17  [ТС] 9
152 строка, я вроде что то упустил. Как S сделать публичным? Странно что на пред идущие не ругается.

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
163
164
165
166
167
168
169
170
171
172
#include <iostream>
#include <string>
#include "windows.h"
using namespace std;
// Определение базового класса 
class Mnogougolnik {
char color[30];
int status; 
 
public:
Mnogougolnik(){
 strcpy(color,"");
 status=3;
}
char * GetColor()   
{return color;}
int GetStatus()      
{return status;}
void SetColor(char* COLOR)        
{strcpy(color,COLOR);}      
void SetStatus(int STATUS)      
{ if (STATUS==3 || STATUS==4)
     status=STATUS;}
string ShowStatus(int status)  
{ if (status==3)
return "Треугольник";
else return "Прямоугольник";
}
void Show()   //выводит значения всех полей
{cout<<"Многоугольник - > "<<" Цвет: "<<color<<" Количество сторон: "<<status << " Следовательно это - " <<ShowStatus(status)<<"\n";}
};
                
// Определение производного класса 
class TREUGOLNIK : public Mnogougolnik {
int a,b,c,h,s,p;  
public:
STUDENT()   //конструктор без параметров
{
 a=0;
 c=0;
 b=0;
 h=0;
 s=0;
 p=0;
}
 
int GetA()        
{return a;}
int GetB()        
{return b;}
int GetC()       
{return c;}
int GetH()       
{return h;}
void set_a(int A)         
        { a=A;}
void set_b(int B)         
        { b=B;}
void set_c(int C)         
        { c=C;}
void set_h(int H)         
        { h=H;}
        
        
void set_S()              
          {s = (a*h)/2;}
    double Get_S()                
          {return s;}  
void set_P()              
          {p = a+b+c;}
    double Get_P()                
          {return p;}           
          
 
void Show()   //выводит значения всех полей
{cout<<"Многоугольник - > "<<" Цвет: "<< GetColor() <<" Количество сторон: "<<GetStatus() << "\n";
cout<< "Периметр треугольника: " << Get_P() << " Площадь треугольника: " << Get_S() <<"\n";}
 
};
 
class PRYAMOUGOLNIK : public Mnogougolnik{
int a1,b1,p1,s1;
public:
PUPIL()   //конструктор без параметров
{
 a1=0;
 b1=0;
 s1=0;
 p1=0;
}
 
int GetA1()        
{return a1;}
int GetB1()        
{return b1;}
 
void set_a1(int A1)         
        { a1=A1;}
void set_b1(int B1)         
        { b1=B1;}
        
void set_S1()              
          {s1 = a1*b1;}
    double Get_S1()                
          {return s1;}  
void set_P1()              
          {p1 = (a1+b1)*2;}
    double Get_P1()                
          {return p1;}          
          
          
void Show()   //выводит значения всех полей
{cout<<"Многоугольник - > "<<" Цвет: "<< GetColor() <<" Количество сторон: "<<GetStatus() << "\n";
cout<< "Периметр прямоугольника: " << Get_P1() << " Площадь прямоугольника: " << Get_S1() <<"\n";}
};
 
int main (){
 SetConsoleOutputCP(1251);
 SetConsoleCP(1251);
 Mnogougolnik group;
 TREUGOLNIK group1;
 PRYAMOUGOLNIK   group2;
 char color[30];
 int status;
 int a,b,c,h,s,p;
 int a1,b1,p1,s1;
 
 
// базовый класс
  cout<<"Какого цвета многоугольник?  "<<"\n";
  cin>>color;
  group.SetColor(color);
  cout<<"Введите количество сторон:  "<<"\n";
  cin>>status;
  group.SetStatus(status);
cout<<"Данные объектов базового класса:\n";
group.Show();
 
 // наследуемый класс
 
    if (group.GetStatus()==3) {
         group1.SetColor(group.GetColor());    
         cout<<"Введите стороны треугольника\n";
         cout<<"Введите a:\n";
         cin>>a;
         cout<<"Введите b:\n";
         cin>>b;
         cout<<"Введите c:\n";
         cin>>c;
         cout<<"Введите h:\n";
         cin>>h;
         group1.set_S(s);
         group1.set_P(p);
      }
    else {
         group2.SetColor(group.GetColor());
         cout<<"Введите стороны прямоугольника\n";
         cout<<"Введите a:\n";
         cin>>a;
         cout<<"Введите b:\n";
         cin>>b;
         group2.Set_P1(p);
         group2.Set_S1(s);
    }
  
//вывод данных объектов производных классов
cout<<"Данные объектов производных классов:\n";
    group1.Show();
    group2.Show();
system("pause");
 
return 0; }
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
07.04.2017, 06:43 10
Цитата Сообщение от ViktorPetrovich Посмотреть сообщение
C++
1
void set_S()  {s = (a*h)/2;}
оно в паблике и находится но не принимает аргументов, а вызов у вас а аргументами
C++
1
group1.set_S(s);
Добавлено через 1 минуту
P.S если вы в вижуал студии отфарматируйте код, сочетания клавиш, ctrl+a (выделить все) и потом последовательно
ctrl + K, ctrl + F (форматирование)

Добавлено через 4 минуты
Потом, почему у вас конструкторы названы отличными именами от имени класса, так делать нельзя, поправить строки
C++
1
STUDENT()
на

C++
1
TREUGOLNIK()
и

C++
1
PUPIL()
на

C++
1
PRYAMOUGOLNIK()
Добавлено через 1 минуту
вот эти методы у вас вообще не объявлены тоже поправляйте на то, что вам нужно
C++
1
2
group2.Set_P1(p);
group2.Set_S1(s);
1
Модератор
Эксперт С++
13642 / 10863 / 6453
Регистрация: 18.12.2011
Сообщений: 28,969
07.04.2017, 07:28 11
Цитата Сообщение от ViktorPetrovich Посмотреть сообщение
C++
1
2
{ if (status==3) 
return "Треугольник";
логическая ошибка проектирования объекта.
базовый класс не знает структуру наследника.
для этого есть полиморфизм.
метод Show должен быть виртуальным.
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
#include <iostream>
#include <string>
#include <cmath>
#include <windows.h>
using namespace std;
// Определение базового класса 
class Mnogougolnik {
protected:
    string color;
    int status; 
public:
    Mnogougolnik():color("black"),status(0){}
    Mnogougolnik(string c,int s):color(c),status(s){}
    //string GetColor(){ return color; }
    //int GetStatus(){ return status; }
    //void SetColor(string COLOR){ color=COLOR; }      
    //void SetStatus(int STATUS){ status=STATUS; }
    virtual string StatusName(){ return "Unknown"; } 
    void Show()   //выводит значения всех полей
    {
        cout<<"Многоугольник - >"<<StatusName()<<" Цвет: "<< color <<" Количество сторон: "<<status << "\n";
        cout<< "Периметр: " << Get_P() << " Площадь: " << Get_S() <<"\n";
    }
    virtual double Get_P(){return 0;}
    virtual double Get_S(){return 0;}
 
};
 
// Определение производного класса 
class TREUGOLNIK : public Mnogougolnik {
    double a,b,c;  
public:
    string StatusName()  
    { return "Треугольник";}
    TREUGOLNIK():Mnogougolnik()   //конструктор без параметров
    {
        a=0;
        c=0;
        b=0;
    }
    TREUGOLNIK(string s,double A,double B,double C):Mnogougolnik(s,3) 
    {
        a=A;
        c=C;
        b=B;
    }
 
    double Get_S()              
    {
        double p=(a+b+c)/2.;
        return sqrt(p*(p-a)*(p-b)*(p-c));
    }
    double Get_P()                
    {
        return a+b+c;
    }           
};
 
class PRYAMOUGOLNIK : public Mnogougolnik{
    double a,b;
public:
    string StatusName()  
    { return "Прямоугольник";}
    PRYAMOUGOLNIK():Mnogougolnik()   //конструктор без параметров
    {
        a=0;
        b=0;
    }
    PRYAMOUGOLNIK(string s,double A,double B):Mnogougolnik(s,4) 
    {
        a=A;
        b=B;
    }
 
    double Get_S()                
    {
        return a*b;
    }  
    double Get_P()                
    {
        return (a+b)*2.0;
    }          
};
 
int main (){
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    Mnogougolnik* pm;
    string color; 
    int status; 
    // базовый класс
    cout<<"Какого цвета многоугольник?  "<<"\n";
    cin>>color;
    cout<<"Введите количество сторон:  "<<"\n";
    cin>>status;
    cout<<"Данные объектов базового класса:\n";
    Mnogougolnik group(color,status);
    pm=&group;
    pm->Show();
 
    // наследуемый класс
    double a,b,c;
    cout<<"Какого цвета треугольник?  "<<"\n";
    cin>>color;
    cout<<"Введите стороны треугольника\n";
    cout<<"Введите a:\n";
    cin>>a;
    cout<<"Введите b:\n";
    cin>>b;
    cout<<"Введите c:\n";
    cin>>c;
    TREUGOLNIK group1(color,a,b,c);
    pm=&group1;
    pm->Show();
 
    // наследуемый класс
    cout<<"Какого цвета прямоугольник?  "<<"\n";
    cin>>color;
    cout<<"Введите стороны прямоугольника\n";
    cout<<"Введите a:\n";
    cin>>a;
    cout<<"Введите b:\n";
    cin>>b;
    PRYAMOUGOLNIK group2(color,a,b);
    pm=&group2;
    pm->Show();
    system("pause");
 
    return 0; 
}
1
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
07.04.2017, 12:25 12
Лучший ответ Сообщение было отмечено ViktorPetrovich как решение

Решение

Во я как сделал! Уха-ха-ха!!!!!!! Я лучший!!!!!!!!!!!!!!!!!!!
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
//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#include <conio>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
int z;
 
/*
struct Point
{
double x, y;
};
TPoint
*/
 
class Mnogougolnik
{
public:
int Points;  //×èñëî òî÷åê ìíîãîóãîëüíèêà
TPoint *Vertexes;  //Äèíàìè÷åñêèé ìàññèâ âåðøèí ìíîãîóãîëüíèêà
 
Mnogougolnik(int KV/*Kolichestvo vershin*/,
             TPoint *IA)
{
Points = KV;
Vertexes = IA;
}
 
~Mnogougolnik(void)
{
    delete[] Vertexes;
}
};
//=======================Mnogougolnik========================================
 
 
class Triangle:public Mnogougolnik  
{
public:
Triangle(TPoint *VU): Mnogougolnik(3, VU)
{
}
~Triangle(void)
{}
};
 
class NRectangle:public Mnogougolnik
{
public:
NRectangle(TPoint *VU): Mnogougolnik(2, VU)
{}
~NRectangle(void)
{}
};
 
 
int main(int argc, char* argv[])
{
int V;
TPoint *Massiv;
//===========================Mnogougolnik====================================
cout << "Konstruiruem Mnogoulnik. Vvdedite kolichestvo vershin:";
cin >> V;
 
Massiv = new TPoint[V];
cout << "\nNabivaem vremennii Massiv vershinami.\n\n";
cout << "Vvedite koordinati " << V << " tochek:";
for(z = 0; z < V; z++)
{
    cout << "\nVvedite " << z+1 << " tochku mnogougolnika:\nx=";
    cin >> Massiv[z].x;
    cout << "\ny=";
    cin >> Massiv[z].y;
}
Mnogougolnik M1(V, Massiv);
//Triangle T1;
//NRectangle R1;
 
cout << "\n\nPechataem dannie:\n\n";
cout << "Vertexes: " << V << "\n";
for(z = 0; z < V; z++)
{
    cout << "\nVertex " << z+1 << ":\n";
    cout << "x=" << M1.Vertexes[z].x << "\n";
    cout << "y=" << M1.Vertexes[z].y << "\n";
}
 
 
//===========================Treugolnik====================================
V = 3;
delete[] Massiv;
Massiv = new TPoint[V];
cout << "\nNabivaem vremennii Massiv vershinami.\n\n";
cout << "Vvedite koordinati " << V << " tochek:";
for(z = 0; z < V; z++)
{
    cout << "\nVvedite " << z+1 << " tochku mnogougolnika:\nx=";
    cin >> Massiv[z].x;
    cout << "\ny=";
    cin >> Massiv[z].y;
}
Triangle T1(Massiv);
 
cout << "\n\n=================================\n";
cout << "\n\nPechataem dannie:\n\n";
cout << "Vertexes: " << V << "\n";
for(z = 0; z < V; z++)
{
    cout << "\nVertex " << z+1 << ":\n";
    cout << "x=" << T1.Vertexes[z].x << "\n";
    cout << "y=" << T1.Vertexes[z].y << "\n";
}
 
 
 
 
//===========================Rectangle====================================
V = 2;
delete[] Massiv;
Massiv = new TPoint[V];
cout << "\nNabivaem vremennii Massiv vershinami.\n\n";
cout << "Vvedite koordinati " << V << " tochek:";
for(z = 0; z < V; z++)
{
    cout << "\nVvedite " << z+1 << " tochku mnogougolnika:\nx=";
    cin >> Massiv[z].x;
    cout << "\ny=";
    cin >> Massiv[z].y;
}
NRectangle R1(Massiv);
 
cout << "\n\n=================================\n";
cout << "\n\nPechataem dannie:\n\n";
cout << "Vertexes: " << V << "\n";
for(z = 0; z < V; z++)
{
    cout << "\nVertex " << z+1 << ":\n";
    cout << "x=" << R1.Vertexes[z].x << "\n";
    cout << "y=" << R1.Vertexes[z].y << "\n";
}
getch();
delete[] Massiv;
return 0;
}
//---------------------------------------------------------------------------
Работает!
Заточено под C++Builder 6, если что.
В конструкторах тепереь ничего не спришвает, работа с консолью только в main().

Добавлено через 3 минуты
Плохо, что русские буквы тут не печатает. Если что тут написано вот это:
C++
1
2
3
4
5
class Mnogougolnik
{
public:
int Points;  //Число точек многоугольника
TPoint *Vertexes;  //Указатель на динамический массив вершин многоугольника
Добавлено через 39 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
Конструктор должен создавать объект по конкретным данным, а не заниматься опросом пользователя транслитерацией.
- MrGluck, а можете ответить на вопрос почему в базовом классе есть работа с консолью, а в детях нет?
2
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
07.04.2017, 12:28 13
Цитата Сообщение от DemolitionMan Посмотреть сообщение
MrGluck, а можете ответить на вопрос почему в базовом классе есть работа с консолью, а в детях нет?
Потому что дети были точно так же хренового спроектированы. Не должно быть в конструкторе операций ввода/вывода, как у вас. Ни в каких классах, а не только в производных.
1
Модератор
Эксперт С++
13642 / 10863 / 6453
Регистрация: 18.12.2011
Сообщений: 28,969
09.04.2017, 21:38 14
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Vertexes = IA;
Нельзя указателем адресовывать внешние данные.
Нужно выделить память и их скопировать!!!!

И правило трех еще никто не отменял!!!!
Распространенные ошибки
0
0 / 0 / 0
Регистрация: 19.02.2022
Сообщений: 3
11.04.2022, 10:07 15
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
/******************************************************************************
 
Создать класс «n-угольник», заданный длинами и количеством сторон. Определить
производные классы «Треугольник» и «Квадрат». Предусмотреть виртуальную функцию
для вычисления периметра фигуры, сравнить периметры треугольника и квадрата,
стороны которых введены с клавиатуры.
 
*******************************************************************************/
 
#include <iostream>
 
using namespace std;
 
class N     /// Создать класс «n-угольник»
{   
protected:          /// заданный длинами и количеством сторон
    double a;
    double b;
    double c;
    double kv;
    
public:
    N() { }
    N(double a, double b, double c, double kv)
    {
        this->a = a;
        this->b = b;
        this->c = c;
        this->kv = kv;
    }
    
    virtual void perimetr() { }     /// Предусмотреть виртуальную функцию для вычисления периметра фигуры
    
    friend void compare();      /// сравнить периметры треугольника и квадрата
};
 
class delta: public N       ///Определить производные классы «Треугольник»
{
    double Pd;
public:
    delta(double a, double b, double c, double kv) : N(a, b, c, kv) { }
    void perimetr()
    {
        Pd = a + b + c;
        cout<<"Периметр треугольника = "<< Pd <<endl;
    }
    
    double get_Pd()
    {
        return Pd;
    }
    
 
};
 
class square: public N      /// Определить производные классы «Квадрат»
{
    double Ps;
public:
    square(double a, double b, double c, double kv) : N(a, b, c, kv) { }
    void perimetr()
    {
        Ps = kv * 4;
        cout<<"Периметр квадрата = "<< Ps <<endl;
    }
    
    double get_Ps()
    {
        return Ps;
    }
};
 
void compare(delta &ob_delta, square &ob_square)
{
    if (ob_delta.get_Pd() > ob_square.get_Ps())
    {
        cout<<"Периметр треугольника больше квадрата";
    }
    else
        cout<<"Периметр квадрата больше(или равно) треугольника";
}
 
int main()
{
    double a, b, c, kv;
    cout<<"Введите стороны треугольника: ";     /// стороны которых введены с клавиатуры.
    cin>>a>>b>>c;
    cout<<"Введите сторону квадрата: ";
    cin>>kv;
    
    N *p;
    delta ob_delta(a, b, c, kv);    /// производный конструктор передает аргументы базовому классу
    square ob_square(a, b, c, kv);
    
    p = &ob_delta;      /// вызов виртуальной функции (смотрит на передаваемые значения)
    p->perimetr();
    
    p = &ob_square;
    p->perimetr();
    
    compare(ob_delta, ob_square);   /// friend, сравнивает периметры
    
    return 0;
}
0
11.04.2022, 10:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2022, 10:07
Помогаю со студенческими работами здесь

Опишите базовый класс фильмов и производные классы
Всем здравствуйте и спасибо что зашли на мое обращение. Мне нужна ваша помощь в данном задании. ...

Опишите базовый класс фильмов и производные классы
ЗАВДАННЯ Опишите базовый класс фильмов и производные: биографический, документальный, детский,...

Опишите базовый класс фильмов и производные классы
Всем здравствуйте и спасибо что зашли на мое обращение. Мне нужна ваша помощь в данном задании....

Опишите базовый класс фильмов и производные классы
Всем здравствуйте и спасибо что зашли на мое обращение. Мне нужна ваша помощь в данном задании....

Опишите базовый класс фильмов и производные классы
Всем здравствуйте и спасибо что зашли на мое обращение. Мне нужна ваша помощь в данном задании....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru