IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   классы в С++ (https://www.imho.ws/showthread.php?t=68994)

Melkor 21.09.2004 18:31

классы в С++
 
Привет всем!
Кто-нибудь может привести пример такой программы:
2 класса,
1-й описывает координаты точки, запись/изменение/вывод на экран
2-й допустим прямоугольник, двумя точками (напр верхний левый и правый нижний углы )
как можно во втором классе создавать 2 первых? вроде конструктор нужен...

class Point {
public:
Point(){};
Point(int x=0, int y=0);
void CoordGet();
void printxy();
void regCoord();
private:
int x,y;
};

Drakosha 21.09.2004 20:33

Цитата:

class Rect {
Point ll_, ur_;

public:
Rect() {}
Rect(const Point& ll, const Point& ur): ll_(ll), ur_(ur) {}

void setLL(const Point& ll) { ll_ = ll; }

}
...

msustudent 21.09.2004 21:26

class Point
{
public :
Point(){set(0,0,0);};
Point(double xx,double yy, int zz);
void set(double ,double ,int );
double x,y;
int z;
};
//.................................................
class Surf
{
public:
void virtual drawLine() = 0;
void virtual drawCircle(Point& p , double radius) = 0;
void virtual drawPoly() = 0;
void virtual drawSquare(Point p,double width) = 0;
void virtual drawTriangle(Point p1,Point p2,Point p3) = 0;
};
//.................................................
class Surface: public Surf
{
public:
void drawLine();
void drawCircle(Point& p , double radius);
void drawPoly();
void drawSquare(Point p,double width);
void drawTriangle(Point p1,Point p2,Point p3);
};
//.................................................

class Shape
{
public:
Shape(){;};
virtual ~Shape(){;};
virtual void draw(Surf&) = 0;
virtual void move(int,Point) = 0;
virtual Point& getP(int) = 0;
virtual int getS() = 0;
};
//.................................................
class Polygon: public Shape
{
абстрактный класс
};
//.................................................
class Square: public Shape
{
const int s;
Point mass[2];
public:
Square();
Square(Point& tl,Point& br);
~Square();
void move(int,Point);
void draw(Surf&);
Point& getP(int);
int getS();
};
//.................................................
class Triangle: public Polygon
{
const int s;
Point mass[3];
public:
Triangle();
Triangle(Point p1,Point p2,Point p3);
~Triangle();
void draw(Surf&);
void move(int,Point);
Point& getP(int);
int getS();
};
//.................................................
class Circle: public Polygon
{
const int s;
Point mass;
double radius;
public:
Circle() ;
Circle(double,double,double, int);
~Circle();
void draw(Surf&);
void move(int,Point);
Point& getP(int);
double getR();
int getS();
};

Melkor 22.09.2004 19:53

Спасибо!
Не совсем понятны 2 вещи:
1. когда нужно запускать
~Square();
и где. В main после программы или он сам запускается. Потом, я не использую 'new' значит он должен быть пустым?

2.
Triangle(Point p1,Point p2,Point p3);
нужно ли их создавать? Например:
private:
Point p1,p2,p3;
и как к ним пройти. Что-то не получается. Допустим если я хочу изменить координаты p2 в 2-х разных Triangle.
Triangle a,b;
a.p2.set(2,1);
b.p2.set(2,1);
?

msustudent 22.09.2004 20:26

1 ~Square - деструктор , запускается по умолчанию при выходе из области объявления или при вызове оператора delete.
2
"Triangle(Point p1,Point p2,Point p3);" конечно нужно!
допустим ты хочешь при объявлении сразу присвоить им какое-то значение!

точки p1-p3 не являются public, обращайся так:
a.getP(0).set(2,0,1);
a.getP(1).set(3,-1,1);
b.getP(3).set(2,0,1);

Melkor 23.09.2004 00:25

все равно что-то не то...
вот упрощенна прга:
Код:

//____________Point работает без проблем________
class Point {
public:
        Point(){set(0,0);};
        Point(int x,int y);
        void CoordRead();      //считывает с клавы
        void printxy();          //печатает содержимое на экране
        void ChangeCoord();  //меняет с помощью пред и след
        void set(int x,int y);  //ставит координаты в x,y
private:
        int x,y;
};


class Rectang:Point{
public:
        Rectang();
        Rectang(Point p1,Point p2);  //каждый Rectang состоит из 2х Point
        void ChangeRect();            //меняет координаты на считанные с клавы
        void PrintRectang();            //печатает
        void setRectang();              //считывает с клавы
        void setRectangx(Point p1z, Point p2z);    //ставит на введенные
        ~Rectang();                      //деструктор
        Point p1,p2;                      //декларация
private:

};

такое впечатление что ошибка в этом ряду
Rectang(Point p1,Point p2); //каждый Rectang состоит из 2х Point

так же пишет ошибку на
Код:

void Rectang::setRectang()
{
        p1.CoordRead();
        p2.CoordRead();
       
}

Хотя они находятся в одном классе и вроде должны быть видны..

Потом из main хочу делать так

Rectang tang1, tang2;
tang1.p1.CoordRead();
tang2.p1.CoordRead();

я студент :)) учить надо однако :)) а хорошего примера в книге нету :((

msustudent 23.09.2004 17:50

а чем тебе не нравится мой пример?
Все прекрасно работает.
Я это писал полгода назад => сразу так тебе не скажу . Надо перерыть литературу.


Часовой пояс GMT +4, время: 12:07.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.