1 / 0 / 1
Регистрация: 26.12.2017
Сообщений: 35
1

Использование команд одного класса другим классом

10.07.2018, 21:06. Показов 1186. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа помогите разобраться. Есть класс 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
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2018, 21:06
Ответы с готовыми решениями:

Использование классом объектов другого класса
Допустим есть два класса, назовём их First и Second, которые используют друг друга. Объявления...

Для достижения перегрузки и переопределения трех методов (использование класса с другим классом вариантов)
необходимо создать объект класса &quot;Текст&quot;, используя класс &quot;страницы&quot;

Видимость экземпляра класса другим классом
Здравствуйте, уважаемые форумчане. Понимаю, что в меня сейчас полетят камни, за столь набивший...

Замена одного класса другим по нажатию на кнопку
Всем привет. Я новичок в JS, нужна помощь знающих. Собственно задача такая - нужно чтобы при...

6
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
10.07.2018, 21:18 2
Лучший ответ Сообщение было отмечено HerMak как решение

Решение

C++
1
2
3
4
5
void Line::Print() const// функция вывода точек начала и конца линии
{
    cout<<"First`s point coords are: "<<"("<<S_.GetX()<<';'<<S_.GetY()<<')'<<endl;
    cout<<"Second`s point coords are: "<<"("<<E_.GetX()<<';'<<E_.GetY()<<')'<<endl;
}
1
1 / 0 / 1
Регистрация: 26.12.2017
Сообщений: 35
10.07.2018, 21:25  [ТС] 3
Выдает целый ряд ошибок:с
Миниатюры
Использование команд одного класса другим классом  
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
10.07.2018, 22:01 4
Вам кажется, я написал всё верно.
0
1 / 0 / 1
Регистрация: 26.12.2017
Сообщений: 35
10.07.2018, 22:14  [ТС] 5
Так я поправил кое-что, все работает. написал еще одну функцию, но она тоже не робит:С Проверьте пожалуйста
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
bool Read(const char * msg)// ôóíêöèÿ ââîäà
{
    if(msg) cout<<msg;
    int x,y;
    int x1,y1;
    char ch;
    if(cin>>ch && ch=='('&&
    cin>>x&&
    cin>>ch && ch==';'&&
    cin>>y&&
    cin>>ch && ch==')')
    {
        this->SetS(x,y);
        cout<<"You put point S"<<endl;
            if(cin>>ch && ch=='('&&
                cin>>x1&&
                cin>>ch && ch==';'&&
                cin>>y1&&
                cin>>ch && ch==')')
            {
                this->SetE(x1,y1);
                cout<<"You put point E"<<endl;
                return true;
            }
    }
    if(!cin)cin.clear();// !cin - îçíà÷àåò íå ïóñò
//  while(cin.get()!='/n');
    return false ;
пишет такое ошибку
[Error] invalid use of 'this' in non-member function
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
10.07.2018, 22:22 6
Read не член класса - ошибка
0
1 / 0 / 1
Регистрация: 26.12.2017
Сообщений: 35
10.07.2018, 22:23  [ТС] 7
Нашел ошибку
0
10.07.2018, 22:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2018, 22:23
Помогаю со студенческими работами здесь

Использование объекта одного класса при создании нового класса
Добрый вечер. У меня такая проблема. Есть готовый класс L2 - список, на его основе нужно создать...

Использование объектов одного класса в функциях другого класса
Нужно создать класс Комната и класс ДвериОкна, при этом программа должна добавлять объекты класса...

Использование одного экземпляра класса
Добрый день! Помогите, никак не могу накопать нужную информацию. Как использовать один и тот же...

Использование одного экземпляра класса
Всем добрый день! Вот хоть убей, не могу понять как! Суть такая. Есть игра, в игре 4 класса, а...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru