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

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

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

Классы - C++

06.12.2011, 03:26. Просмотров 392. Ответов 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;
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2011, 03:26     Классы
Посмотрите здесь:

C++ Классы
Классы C++
C++ классы
C++ Классы С++
Классы в С++ C++
C++ Классы С++
Классы C++
Классы С++ C++
C++ Классы в С++
Классы C++ C++
C++ Классы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 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();
}


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

Цитата Сообщение от liza_93 Посмотреть сообщение
И мне не нужен код когда есть уже приведенный выше
так я вам ничего не навязываю. это только пример того как можно построить вашу систему классов.
Yandex
Объявления
06.12.2011, 16:41     Классы
Ответ Создать тему
Опции темы

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