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

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

Войти
Регистрация
Восстановить пароль
 
 
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
#1

Объявление класса Point - C++

05.04.2014, 16:40. Просмотров 881. Ответов 38
Метки нет (Все метки)

Объявил класс Point в заголовочном класса для хранения значений координат x,y а далее класс Rectanagle
и вот в классе Rectanagle каждая точка определяет координаты на плоскости линий и используется для создания объекта Rectanagle но при объявлении в нем переменной тип int - требует точку с запятой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
 class Rectangle
{
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
Код
В строке int GetTop()  const { return itsTop; }
Здесь сразу встроены функции а их реализация в файле Ractanagle.cpp

Код на C++

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
#include <iostream>
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location) 
           { itsLowerLeft = Location; }
    void SetUpperRight( Point = Location)
           { itsUpperRight = Location; } 
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsbottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 16:40     Объявление класса Point
Посмотрите здесь:

Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. - C++
Класс Triangle (треугольник). Класс хранит Декартовы координаты трех углов треугольника. Конструктор принимает три группы координат. Должны...

Объявление объекта класса - C++
Доброе время суток! Дело вот в чем: В конструкторе c параметрами класса Piramida, мне нужно создать объект класса M_Ygolnik с...

Объявление класса с шаблоном - C++
Пишу в Qt. Создал класс с шаблоном matrix.h #ifndef MATRIX_H #define MATRIX_H template &lt;class T&gt; class Matrix {

Объявление структуры и класса - C++
Ругается на строку obj_cls.prv=3; и на объявление класса. Что у меня не правильно? #include &lt;iostream&gt; using namespace std; ...

Объявление класса Patient - C++
Доброго времени суток! Есть программа, в ней несколько файлов. Есть класс Patient, на который создается указатель в файле...

Двойное объявление класса - C++
Для чего два раза писать class Animal? class Animal; void setValue (Animal&amp;, int); class Animal { public: Animal(); ...

Объявление шаблонного класса - C++
Как объявить шаблонный класс?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
05.04.2014, 17:09     Объявление класса Point #2
C++
1
2
~Rectangle ()
       { } // код деструктора
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
05.04.2014, 17:58  [ТС]     Объявление класса Point #3
А что не так с деструктором-? Конструктор принимает четыре параметра а деструктор по умолчанию и что за код-?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
05.04.2014, 18:13     Объявление класса Point #4
zero-11, после объявления деструктора пропущена точка с запятой либо тело.
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 11:42  [ТС]     Объявление класса Point #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
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
 #include <iostream>
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location) 
           { itsLowerLeft = Location; }
    void SetUpperRight( Point = Location)
           { itsUpperRight = Location; } 
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsbottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
Может я чего то не заметил или класс можно объявить иначе:

C++
1
2
3
4
5
6
7
8
9
10
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
заранее спасибо.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
07.04.2014, 12:04     Объявление класса Point #6
Как еще показать...

Цитата Сообщение от zero-11 Посмотреть сообщение
C++
1
2
3
public:
* * Rectangle (int top, int left, int Bottom, int right);
* * ~Rectangle () {} // < вот тут нужна либо точка с запятой, либо тело
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
07.04.2014, 12:06     Объявление класса Point #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Добавить точку с запятой:
C++
18
    ~Rectangle ();
Убрать равно:
C++
36
    void SetUpperRight( Point = Location)
Добавть круглые скобки:
C++
46
    int GetArea() const;
Исправить опечатку в имени переменной:
C++
43
    void SetBottom(int bottom)          { itsbottom = bottom;}

Весь
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
 #include <iostream>
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right );
      /*{
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }*/
    ~Rectangle ();
      /*{
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };*/
 
 
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location)
           { itsLowerLeft = Location; }
    void SetUpperRight( Point Location)
           { itsUpperRight = Location; }
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsBottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea() const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:17  [ТС]     Объявление класса Point #8
Все понятно - разобрался. Спасибо.

Добавлено через 1 час 4 минуты
Только еще одна проблема - подключил файл заголовка, к самому исходному коду Rectangle.cpp но не хочет компилировать.

Rectangle.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
// Rectangle.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "Rectangle.h"
 
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
    itsTop = top;
    itsLeft = left;
    itsBottom = bottom;
    itsRight = right;
 
    itsUpperLeft.setX(left);
    itsUpperLeft.setY(top);
 
    itsUpperRight.setX(right);
    itsUpperRight.setY(top);
 
    itsLowerLeft.setX(left);
    itsLowerLeft.setY(bottom);
 
    itsLowerRight.setX(right);
    itsLowerRight.setY(bottom);
}
 
int Rectangle::GetArea() const
{
    int Width = itsRight - itsLeft;
    int Height = itsTop - itsBottom;
    return ( Width * Height );
}
 
int main()
{
    Rectangle MyRectangle(100, 20, 50, 80 );
 
    int Area = MyRectangle.GetArea();
 
    std::cout << "Area: " << Area << endl;
    std::cout << "Upper Left X Coordinate: ";
    std::cout << MyRectangle.GetUpperLeft().GetX();
    system("PAUSE");
}
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
07.04.2014, 14:19     Объявление класса Point #9
Цитата Сообщение от zero-11 Посмотреть сообщение
но не хочет компилировать
Накричите на него Какие-нибудь сообщения об ошибках выдает?
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:30  [ТС]     Объявление класса Point #10
Да, выдает:

1>------ Построение начато: проект: Rectangle, Конфигурация: Debug Win32 ------
1> Rectangle.cpp
C++
1
2
3
1>Rectangle.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Rectangle::~Rectangle(void)" (??1Rectangle@@QAE@XZ) в функции _main
1>C:\Users\Игорь\Documents\Visual Studio 2010\Projects\Rectangle\Debug\Rectangle.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
07.04.2014, 14:40     Объявление класса Point #11
zero-11, ну а где тела конструктора и деструктора? Раскомментируйте их в коде, который я писал чуть выше (и точки с запятой удалите после каждого).

Добавлено через 666 секунд
Хотя к черту. Вот:
код
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
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right )
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ()
      {
        itsTop    = 0;
        itsLeft   = 0;
        itsBottom = 0;
        itsRight  = 0;
      };
 
 
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location)
           { itsLowerLeft = Location; }
    void SetUpperRight( Point Location)
           { itsUpperRight = Location; }
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsBottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea() const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:43  [ТС]     Объявление класса Point #12
Но функция GetX - функция доступа к переменной x - int GetX - определена и поэтому он не должен ссылаться на невозможность получить доступ к классу Point - функция доступа int GetX() имеет встроенное определение int GetX() const { return itsX } и является функцией доступа класса Point.

Или же дело в деструкторе:

Код
1>Rectangle.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Rectangle::~Rectangle(void)" (??1Rectangle@@QAE@XZ) в функции _main
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
07.04.2014, 14:50     Объявление класса Point #13
Продолжая отвлеченный разговор, можно наблюдать интересный факт, как студия наглядно обзывает функции:
Код
??1Rectangle@@QAE@XZ
zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:52  [ТС]     Объявление класса Point #14
Все равно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right );
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ();
     {
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
Код на С++

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
#include <iostream>
using namespace std;
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right );
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ();
     {
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location) 
           { itsLowerLeft = Location; }
    void SetUpperRight( Point  Location)
           { itsUpperRight = Location; } 
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsBottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea() const;
    
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 14:57     Объявление класса Point
Еще ссылки по теме:

Объявление объектов класса - C++
Как инициализировать объекты класса вне функции main, но и не в глобальной области? Объявленные объекты занимают много пространства в...

Предварительное объявление класса - C++
Имеется код такого вида: class IBase { public: virtual foo() = NULL; .. .. .. };

Объявление наследника шаблонного класса - C++
как объявить наследника шаблонного класса, да ещё если он обрамлён собственным пространсвом имён? Вот мой класс: namespace my_complex { ...

Объявление класса и элемент-функции - C++
Здравствуйте! Имеется следующий исходный код: // определить класс GradeBook с элемент-функцией displayMessage; // создать обхект...

Объявление класса после инициализации - C++
Подскажите возможно ли объявление класса в такой последовательности, чтобы вместо объявления написать class car;, просто видел в некоторых...


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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
07.04.2014, 14:57     Объявление класса Point #15
Цитата Сообщение от zero-11 Посмотреть сообщение
Все равно
Нет. Мне не все равно. Или скопируйте полностью мой код или прислушайтесь к замечанию в скобочках:
в четвертой и в одиннадцатой строке уберите точку с запятой.
Yandex
Объявления
07.04.2014, 14:57     Объявление класса Point
Ответ Создать тему
Опции темы

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