Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Разработать классы "круг" и "треугольник"


Автор: zubikova 12.3.2010, 21:57
Помогите, пожалуйста, с программой:

Разработать систему классов: круг, квадрат. Для квадрата реализовать метод поворота на заданный угол вокруг точки пересечения диагоналей. Для круга реализовать метод изменения размера на заданный коэффициент, положение точки пересечения диагоналей остается неизменной

Автор: Fortnox 12.3.2010, 21:58
Язык?

Автор: zubikova 12.3.2010, 21:59
С++
Извините, что не указала

Автор: NightmareZ 12.3.2010, 22:25
Код
struct Point
{
    float X, Y;
};

class Shape
{
private:
    Point _coords;
public:
    Shape(Point coords) : _coords(coords) { }
    Point GetCoords() const { return _coords; }
};

class Square : public Shape
{
private:
    float _angle;
    float _size;
public:
    Square(Point coords, float angle, float size) : Shape(coords), _angle(angle), _size(size) { }
    void Rotate(float angle) { _angle += angle; }
};

class Circle : public Shape
{
private:
    float _radius;
public:
    Circle(Point coords, float radius) : Shape(coords), _radius(radius) { }
    void Scale(float d) { _radius *= d; }
};

Автор: zubikova 13.3.2010, 21:58
ммм...а не подскажете как тут организовать ввод-вывод данных?

Автор: NightmareZ 13.3.2010, 23:28
Цитата(zubikova @ 13.3.2010,  21:58)
ммм...а не подскажете как тут организовать ввод-вывод данных?

Ну вот тебе вывод. Ввод делается аналогично.

Код
#include <iostream>
#include <vector>
#include <memory>

struct Point
{
    float X, Y;
    Point(float x, float y) : X(x), Y(y) { }
};

class Shape
{
private:
    Point _coords;
    virtual void PrintInfo() = 0;
public:
    Shape(Point coords) : _coords(coords) { }
    Point GetCoords() const { return _coords; }
    friend std::ostream& operator<<(std::ostream& s, Shape* shape);
};

std::ostream& operator<<(std::ostream& s, Shape* shape)
{
    shape->PrintInfo();
    return s;
}

class Square : public Shape
{
private:
    float _angle;
    float _size;
    void PrintInfo();
public:
    Square(Point coords, float angle, float size) : Shape(coords), _angle(angle), _size(size) { }
    void Rotate(float angle) { _angle += angle; }
};

void Square::PrintInfo()
{
    std::cout 
        << "Square (angle = " << _angle
        << ", size = " << _size
        << ")" << std::endl;
}

class Circle : public Shape
{
private:
    float _radius;
    void PrintInfo();
public:
    Circle(Point coords, float radius) : Shape(coords), _radius(radius) { }
    void Scale(float d) { _radius *= d; }
};

void Circle::PrintInfo()
{
    std::cout 
        << "Circle (radius = " << _radius
        << ")" << std::endl;
}

typedef std::tr1::shared_ptr<Shape> ShapePtr;
typedef std::vector<ShapePtr> ShapeVec;
typedef std::vector<ShapePtr>::iterator ShapeVecIt;

int main()
{
    ShapeVec vec;

    vec.push_back(ShapePtr(new Square(Point(5, 5), 45, 10)));
    vec.push_back(ShapePtr(new Circle(Point(30, 40), 15)));

    for (ShapeVecIt it = vec.begin(); it != vec.end(); it++)
        std::cout << *it;
    
    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)