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

С++ для начинающих

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

Классы - C++

06.12.2011, 03:26. Просмотров 459. Ответов 3
Метки нет (Все метки)

Условие задачи
Построить систему классов для описания плоских геометрических фигур: круг, квадрат, прямоугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров.Программа должна содержать меню, позволяющее осуществить проверку всех методов классов.

В интернете нашла похожую решенную задачку, но в ней много лишнего по сравнению с моим заданием, поэтому у меня по ней есть вопросы:
1) Ниже приведен код. Что означает запись double a[4][2] в 7 строчке кода? Зачем задается массив?
2) Как сделать чтобы выводилась соответствующая ошибка в меню выбора фигуры (так как если вводить цифры больше 3 или меньше 1 то программа начинает выполняться дальше, а должна обратно возвращаться в меню выбора фигуры. Т.е. сделать проверку условия nf<1, Nf>3)

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 <stdlib.h>
#include <math.h>
#include<stdio.h>
class PGF{
double a[4][2], n, ax, ay, axn,ayn,axn1,axn2,ayn1,ayn2, cx, cy,  i;
double r;
int nf;
public:
void Vibor();
void Vvod();
void Perem();
void Izm_raz();
void Vrash();
void Vivod();
};
void main()
{ PGF a;
clrscr();
a.Vibor();
a.Vvod();
a.Vivod();
a.Perem();
a.Vivod();
a.Izm_raz();
a.Vivod();
a.Vrash();
a.Vivod();
}
//выбор фигуры
void PGF::Vibor()
{
cout<<endl;
cout<<"Выберите фигуру: круг-1, квадрат-2, прямоугольник-3";
cout<<endl;
cin>>nf;
}
//создание
void PGF::Vvod()
{
if (nf==1)
{ cout<<endl;cout<<"Введите параметры круга \n";
cout<<" cx=";cin>>cx;cout<<" cy=";cin>>cy;cout<<" r=";cin>>r;
cout<<endl;
}
if (nf==2)
{
cout<<endl;cout<<"Введите параметры квадрата ";cout<<endl;
cout<<"Координаты центра:\n cx=";cin>>cx;
cout<<" cy=";cin>>cy;
cout<<"Вектор от центра до вершины:\n";
cout<<" ax=";cin>>ax;cout<<" ay=";cin>>ay;
}
if (nf==3)
{
cout<<endl;cout<<"Введите параметры прямоугольника";cout<<endl;
cout<<"Координаты центра:\n cx=";cin>>cx;
cout<<" cy=";cin>>cy;
cout<<"Вектор от центра до вершины:\n";
cout<<" ax=";cin>>ax;cout<<" ay=";cin>>ay;
}
}
//вывод
void PGF::Vivod()
{
cout<<"Параметры фигуры";
cout<<endl;
if (nf==1)
{cout<<endl;cout<<"cx="<<cx<<" cy="<<cy<<" r="<<r;
cout<<endl;
}
if (nf==2)
{
cout<<endl;
cout<<"cx="<<cx<<" cy="<<cy<<" ax="<<ax<<" ay="<<ay;
cout<<endl;cout<<endl;
}
if (nf==3)
{
cout<<endl;
cout<<"cx="<<cx<<" cy="<<cy<<" ax="<<ax<<" ay="<<ay;
cout<<endl;
}
}
//перемещение на плоскости
void PGF::Perem()
{ int sx,sy;
cout<<"Введите координаты смещения фигуры ";
cout <<endl;
cout<<"Смещение по X= ";cin>>sx;
cout<<"Смещение по Y= ";cin>>sy;
cx=cx+sx;cy=cy+sy;
ax=ax+sx;ay=ay+sy;
}
//изменение размеров
void PGF::Izm_raz()
{
double s,Ax,Ay,Bx,By,Cx,Cy,k,d,AB,BC;
if (nf==1)
{
cout<<"Коэффициент изменения радиуса круга= ";
cout<<endl;
cin>>k;
r=r*k;
}
if (nf==2)
{
cout<<"Коэффициент изменения расстояния до вершины квадрата= ";
cout<<endl;
cin>>k;
ax=ax-cx;
ay=ay-cy;
ax=ax*k;
ay=ay*k;
ax=ax+cx;
ay=ay+cy;
}
if (nf==3)
{
cout<<"Коэффициент изменения расстояния до вершины прямоугольника= ";
cout<<endl;
cin>>k;
ax=ax-cx;
ay=ay-cy;
ax=ax*k;
ay=ay*k;
ax=ax+cx;
ay=ay+cy;
}
}
void PGF::Vrash()
{ double f,co,si;
cout<<"Угол поворота фигуры ";
cin>>f;
f=f*M_PI/180;
if(nf==2 || nf==3)
{
ax=ax-cx;
ay=ay-cy;
co=cos(f);
si=sin(f);
axn1=ax*co;
axn2=ay*si;
axn=axn1-axn2;
ayn1=ax*si;
ayn2=ay*co;
ayn=ayn1+ayn2;
ax=axn+cx;
ay=ayn+cy;
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2011, 03:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы (C++):

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void SetX(int...

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

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

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Классы возможностей(Mixin классы) - C++
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...

Классы, включающие другие классы - C++
Столкнулся вот с таким кодом: #include &lt;iostream&gt; class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

3
greeezz
274 / 167 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 08:56 #2
Набросал вам програмку с классами круг и квадрат. что непонятно спрашивайте. по этому подобию можете добавить еще класс прямоугрльник и доработать нужные вам методы. Протестировал в среде Windows. Работает корректно.

абстрактный класс Shape (фигура)
Shape.h

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
#ifndef SHAPE_H_
#define SHAPE_H_
 
class Shape {
public:
    Shape(const float &, const float &);
 
    virtual void draw() const = 0;            //pure virtual function. each shape need to have it's own
    virtual void setShapeParams() = 0;        // -//-//-//-//-//-//-// -
    virtual void changeSize() = 0;
 
    virtual void move(); //wee can use one function to move all our shapes
 
 
    float getAseX() const;
    float getAseY() const;
 
    void setAseX(const float &);
    void setAseY(const float &);
 
    virtual ~Shape();
 
private:
    float aseX;
    float aseY;
};
 
#endif /* SHAPE_H_ */


имплементация класса Shape
Shape.cpp

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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include "Shape.h"
 
Shape::Shape(const float & x, const float & y) : aseX(x), aseY(y){
}
 
float Shape::getAseX() const {
    return aseX;
}
 
float Shape::getAseY() const {
    return aseY;
}
 
void Shape::setAseX(const float &x) {
    this->aseX = x;
}
 
void Shape::setAseY(const float &y) {
    this->aseY = y;
}
 
void Shape::move() {
    float userValue;
    cout <<  "Please enter new X value" << endl;
    cin >> userValue;
    setAseX(userValue);
    cout <<  "Please enter new Y value" << endl;
    cin >> userValue;
    setAseY(userValue);
}
 
Shape::~Shape() {
    // TODO Auto-generated destructor stub
}


объявление класса Circle (круг)
Circle.h

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
#ifndef CIRCLE_H_
#define CIRCLE_H_
 
#include "Shape.h"
 
class Circle: public Shape {
public:
    Circle(const float & = 0, const float & = 0, const float & = 1);
 
    virtual void draw() const;
    virtual void setShapeParams();
    virtual void changeSize();
 
    float getRadius() const;
    void setRadius(const float &);
 
    virtual ~Circle();
 
 
private:
    float radius;
};
 
#endif /* CIRCLE_H_ */


имплементация класса Circle
Circle.cpp

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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include "Circle.h"
 
Circle::Circle(const float &x, const float &y, const float &r) :
        Shape(x, y) {
    setRadius(r);
}
 
float Circle::getRadius() const {
    return radius;
}
 
void Circle::setRadius(const float &r) {
    this->radius = r;
}
 
void Circle::draw() const {
    cout << " AXE X  :: " << this->getAseX() << endl;
    cout << " AXE Y  :: " << this->getAseY() << endl;
    cout << " RADIUS :: " << this->getRadius() << endl;
}
 
void Circle::setShapeParams() {
    float userValue;
    cout << "Please enter X ::\n>";
    cin >> userValue;
    this->setAseX(userValue);
 
    cout << "Please enter Y ::\n>";
    cin >> userValue;
    this->setAseY(userValue);
 
    cout << "Please enter RADIUS ::\n>";
    cin >> userValue;
    this->setRadius(userValue);
}
 
void Circle::changeSize() {
    float userValue;
    cout << "Please enter RADIUS ::\n>";
    cin >> userValue;
    this->setRadius(userValue);
}
 
Circle::~Circle() {
    // TODO Auto-generated destructor stub
}


объявление класса Square (квадрат)
Square.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef SQUARE_H_
#define SQUARE_H_
 
#include "Shape.h"
 
class Square: public Shape {
public:
    Square(const float & = 0, const float & = 0, const float & = 1);
 
    virtual void draw() const;
    virtual void setShapeParams();
    virtual void changeSize();
 
    float getSideSize() const;
    void setSideSize(const float &);
 
    virtual ~Square();
 
private:
    float sideSize;
};
 
#endif /* SQUARE_H_ */


имплементация класса Square
Square.cpp

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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include "Square.h"
 
Square::Square(const float &x, const float &y, const float &side) :
        Shape(x, y) {
 
}
 
void Square::draw() const {
    cout << " AXE X       :: " << this->getAseX() << endl;
    cout << " AXE Y       :: " << this->getAseY() << endl;
    cout << " SIDE SIZE   :: " << this->getSideSize() << endl;
}
 
void Square::setSideSize(const float &size) {
    this->sideSize = size;
}
 
float Square::getSideSize() const {
    return sideSize;
}
 
void Square::setShapeParams() {
    float userValue;
    cout << "Please enter X ::\n>";
    cin >> userValue;
    this->setAseX(userValue);
 
    cout << "Please enter Y ::\n>";
    cin >> userValue;
    this->setAseY(userValue);
 
    cout << "Please enter Side Size ::\n>";
    cin >> userValue;
    this->setSideSize(userValue);
}
 
void Square::changeSize() {
    float userValue;
    cout << "Please enter Side Size ::\n>";
    cin >> userValue;
    this->setSideSize(userValue);
}
 
Square::~Square() {
    // TODO Auto-generated destructor stub
}


запускаемся тут
shape_main.cpp

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
#include <cstdlib>
using std::system;
 
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <string>
using std::string;
 
#include "Shape.h"
#include "Circle.h"
#include "Square.h"
 
void printShapeValues(const Shape * const);
void setUserShapeParams(Shape * const);
 
int main() {
 
    string shapeType;
    int userSelected;
    bool exit = false;
 
    while (!exit) {
        system("CLS");
        Shape * shape;
        Circle newCircle;
        Square newSquare;
 
        cout << "Please select shape\n1 :: Circle\n2 :: Square\n3 :: Exit\n>";
        cin >> userSelected;
        switch (userSelected) {
        case 1:
            shapeType = "Circle";
            shape = &newCircle;
            break;
        case 2:
            shapeType = "Square";
            shape = &newSquare;
            break;
        default:
            exit = true;
            break;
        }
        if (!exit) {
            cout << "\nUse default values or set new ?\n1 :: Default\n2 :: Set new\n>";
            cin >> userSelected;
            if (userSelected == 2) {
                setUserShapeParams(shape);
            }
            cout << "\nCurrent Shape  :: " << shapeType << endl;
            cout << "Current Params :: \n";
            printShapeValues(shape);
 
            cout << "\nWould you like to move " << shapeType << " ?\n1 :: Yes\n2 :: No\n>";
            cin >> userSelected;
            switch (userSelected) {
            case 1:
                shape->move();
                cout << "New X and Y values :: \n";
                printShapeValues(shape);
                cout << "\nPress any key to continue";
                cin.clear();
                cin.ignore(100,'\n');
                cin.get();
                break;
            default:
                break;
            }
        }
 
    }
    return 0;
}
 
void setUserShapeParams(Shape * const shape) {
    shape->setShapeParams();
}
 
void printShapeValues(const Shape * const shape) {
    shape->draw();
}


успехов!
0
liza_93
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 8
06.12.2011, 11:19  [ТС] #3
greeezz, по вашему коду видно что у вас совсем другой уровень программирования. И мне не нужен код когда есть уже приведенный выше Классы
0
greeezz
274 / 167 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 16:41 #4
Цитата Сообщение от liza_93 Посмотреть сообщение
Условие задачи
Построить систему классов для описания плоских геометрических фигур: круг, квадрат, прямоугольник.
предполагается наличие классов описывающих геометрические фигуры. в приведенном вами коде, класс только один и он никакого отношения к описанию фигур не имеет.

Цитата Сообщение от liza_93 Посмотреть сообщение
И мне не нужен код когда есть уже приведенный выше
так я вам ничего не навязываю. это только пример того как можно построить вашу систему классов.
0
06.12.2011, 16:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 16:41
Привет! Вот еще темы с ответами:

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. - C++
Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о....

КЛАССЫ - C++
Очень нужна помощь!!! подскажите где ошибки: #include &lt;iostream&gt; #include &lt;windows.h&gt; char* Rus(const char* text); using...

Классы в С++ - C++
Ребята, помогите пожалуйста. Я новичок в программировании, а сессия заканчивается. Нужно привести пример класса (С++): описание класса,...


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

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

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