1 / 0 / 1
Регистрация: 26.12.2017
Сообщений: 35
|
|
1
|
Использование команд одного класса другим классом
10.07.2018, 21:06. Показов 1186. Ответов 6
Господа помогите разобраться. Есть класс Line, а есть класс Point. Лайн строится на двух поинтах.
Это Line.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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| #ifndef LINE_H
#define LINE_H
#include "Point.h"
class Line //заголовок описания класса Point
{ //начало закрытой (по умолчанию) части класса
private: //спецификатор закрытой части (секции) класса
Point S_, E_; //члены-данные (свойства) класса (подчеркивание в
//конце – это современные рекомендации экспертов)
public: //спецификатор открытой части - интерфейса класса
//** 1 **минимальный интерфейс класса
//объявленные ниже методы доступа (методы-аксессоры)
// Get...() и Set...() образуют минимальный интерфейс класса
Point GetS() //член-функция (метод) для чтения компонента х_
{ //определение метода в классе неявно объявляет его
return S_; // встроенным (inline) (лучше этого избегать)
}
// стандартный интерфейс
Point GetE(); //это прототип метода, а его определение находится
//здесь же, но после описания класса (так лучше)
void SetE(int,int); //метод для установки значения компонента х_,
//определение его и всех остальных методов
void SetS(int,int); //размещается в файле реализации Line.cpp
// расширенный интерфейс
void Print()const; // функция вывода точек начала и конца линии
bool Read(const char * =0);// функция вывода
};
//Определение встроенной функции должно быть видимым компилятору в точке
//ее вызова, по этой причине оно расположено в заголовочном файле.
//Имена функций-членов, определяемых вне контекста класса, должны быть
//полностью квалифицированы (уточнены) при помощи бинарного оператора ::
inline Point Line::GetE() //здесь inline надо объявлять явно
{
return E_;
}
#endif |
|
Это line.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
| //Listing 2.2. Файл Line.cpp: реализация класса line
#include <iostream>
#include "Point.h"
#include "Line.h" //включение делает видимым определение
//класса Point в файле реализации
using namespace std;
//В файле реализации имя каждой функции-члена класса должно быть
//полностью квалифицировано при помощи бинарного оператора ::
void Line::SetS(int x,int y)
{
S_.SetX(x);
S_.SetY(y);
}
void Line::SetE(int x,int y)
{
E_.SetX(x);
E_.SetY(y);
}
void Line::Print() const// функция вывода точек начала и конца линии
{
cout<<"First`s point coords are: "<</*что писать здесь?*/;cout<<endl;
cout<<"Second`s point coords are: "<</*что писать здесь?*/;cout<<endl;
}
bool Read(const char * =0);// функция ввода |
|
Вот Point.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
29
30
31
32
33
34
35
36
| #ifndef POINT_H // ýòî çàùèòà îò ïîâòîðíîé çàãðóçêè!!! î÷åíî âàæíî
#define POINT_H //
class Point
{
private:
int x_,y_;
public:
// ìèíèìàëüíûé èíòåðôåéñ
int GetX()const{return x_;}// ýòî inline
int GetY()const{return y_;}// ìèíèìàëüíûé èíòåðôåéñ ìîæíî óáðàòü â ïðèâàò , òàê êàê ó íàñ åñòü âñå íóæíî èíòåðâåéñ
void SetX(int);
void SetY(int);
// ðàñøèðåííûé
void Print(void)const;// ïå÷àòü
bool Read(const char * =0);// ââîäñ ñ êëàâèàòóðû
void Move(int delta_x, int delta_y );// ñäâèã ïî äåëüòå
double Dist(const Point &)const;// const ÷òî áû íå èñïîðòèòü à ññûëêà(&) ÷òî áû íå ñîçäàâàëàñü êîïèÿ
friend double fdist(const Point &a,const Point &b); // íå ÿâë ÷ëåíîì êëàññà íî èìååò äîñòóï êî âñåìó
// êîíñòðóêòîð ïî óìîë÷àíèþ
Point();
// êîíñòðóêòîð êîïèðîâàíèÿ
Point(const Point &other);
// êîíñòðóêòîð ÿâíûé
Point(int, int);
// êîíñòðóêòîð ïðåîáðàçîâàíèÿ
Point(int);
// êîíñòðóêòîð 3 â 1
//Point(int =0, int =0);
//äåñòðóêòîð
~Point();
//explicit// îçíà÷àåò òîëüêî ÿâíûé âûçîâ. Ðó÷êàìè
// ïåðåîïðåäåëèòü îïåðàòîð ïðèñâàèâàíèÿ operator <çíàê>
Point & operator = (const Point &);
explicit
};
#endif |
|
А это Point.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
| #include "Point.h"
#include <iostream>
#include <cmath>
using namespace std;
void Point::SetX(int x)
{
x_=x>=0? x:0;
}
void Point::SetY(int y)
{
y_=y>=0? y:0;
}
void Point::Print(void)const// ïå÷àòü
{
cout<<'('<<x_<<';'<<y_<<')';//ìîæíî è íàïèñàòü endl íî íå íóæíî íàãðóæàòü ïîëüçîâàòåëÿ
}
bool Point::Read(const char *msg)// ââîäñ ñ êëàâèàòóðû
{
if(msg) cout<<msg;
int x,y;
char ch;
if(cin>>ch && ch=='('&&
cin>>x&&
cin>>ch && ch==';'&&
cin>>y&&
cin>>ch && ch==')')
{
this->SetX(x); this->SetY(y);
return true ;
}
if(!cin)cin.clear();// !cin - îçíà÷àåò íå ïóñò
// while(cin.get()!='/n');
return false ;
}
void Point::Move(int delta_x, int delta_y )// ñäâèã ïî äåëüòå
{
// x_+=delta_x;
// x_=x>=0? x:0;
SetX(x_+delta_x); // this->SetX(x_+delta_x)
SetY(y_+delta_y);
}
double Point::Dist(const Point &other)const
{
return sqrt(pow(static_cast<double>(x_-other.x_),2.0)+
pow(static_cast<double>(y_-other.y_),2.0));
}
double fdist(const Point &a,const Point &b)// ò.ê îíà íå ÷ëåí êëàññà òî ïèñàòü Point:: íå íàäî
{
return sqrt(pow(static_cast<double>(a.x_-b.x_),2.0)+
pow(static_cast<double>(a.y_-b.y_),2.0));
}
// êîíñòðóêòîð ïî óìîë÷àíèþ
Point::Point()
{
SetX(0);
SetY(0);
// äëÿ îòëàäêè
cout<<"Point()";this->Print();cout<<endl;
}
// êîíñòðóêòîð êîïèðîâàíèÿ
Point::Point(const Point &other)
//èöèàëëèçàöèÿ ñïèñêîì
:x_(other.x_),y_(other.y_)
{
// äëÿ îòëàäêè
cout<<"konst kopir";this->Print();cout<<endl;
}
// êîíñòðóêòîð ÿâíûé
Point::Point(int x, int y)
{
SetX(x);
SetY(y);
// äëÿ îòëàäêè
cout<<"Point(int x,int y)";this->Print();cout<<endl;
}
// êîíñòðóêòîð ïðåîáðàçîâàíèÿ
Point::Point(int a)
{
SetX(a); // íàïðèìåð çàäàëè òîëüêî x êîîðäèíàòó à y ýòî 1,5à òî ýòî êîíñòðóêòîð ïîìîæåò
SetY(a);
// äëÿ îòëàäêè
cout<<"Point(int a)";this->Print();cout<<endl;
}
// êîíñòðóêòîð 3 â 1
// Point::Point(int =0, int =0)*/
//äåñòðóêòîð
Point::~Point()
{
cout<<"delete ";this->Print();cout<<endl;
}
// ïåðåîïðåäåëèòü îïåðàòîð ïðèñâàèâàíèÿ operator <çíàê>
Point & Point::operator = (const Point & Rh)
{
x_=Rh.x_;
y_=Rh.y_;
// äëÿ îòëàäêè
cout<<"Point & Poin::operator = (const Point &Rh)";this->Print();cout<<endl;
} |
|
Так как мне вывести значения координат точек S и E в файле Line.cpp ?
0
|