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

Классы - C++

Восстановить пароль Регистрация
 
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.09.2010, 14:53     Классы #1
Привет всем программистам. Вот уже полгода учу С++ и как бы все было относительно понятно (почти))), но вот щас дошел до классов и ничерта не понимаю как и что там. Может кто нить помочь на конкретных примерах, растолковать что к чему, как вообще ими пользоваться. И на лекциях читаю, и Павловскую читал, все равно что то не могу понять. Помогите плиз)) Заранее спасибо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2010, 14:53     Классы
Посмотрите здесь:

C++ Классы
Классы C++
Классы C++
C++ классы с++
Классы в С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.09.2010, 14:56     Классы #2
Цитата Сообщение от robert19 Посмотреть сообщение
И на лекциях читаю
Это бесполезно. Читать нужно литературу. Много и разной.
Цитата Сообщение от robert19 Посмотреть сообщение
Павловскую
Выкинте в мусорку, это бумагомарание ничего не стоит.

Что Вас конкрентно интересует, классы с точки зрения их реализации или на концептульном уровне?
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.09.2010, 15:07  [ТС]     Классы #3
Пока думаю с точки зрения реализации. Просто хочется понять, что там писать нужно. Вот допустим с структурами все понятно, с функциями тоже, а вот тут ...
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.09.2010, 15:15     Классы #4
Цитата Сообщение от robert19 Посмотреть сообщение
Вот допустим с структурами все понятно
Тогда не думаю что должно быть сложно с класами,чемто они похожы
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.09.2010, 15:16  [ТС]     Классы #5
Цитата Сообщение от Asics^ Посмотреть сообщение
Тогда не думаю что должно быть сложно с класами,чемто они похожы
Ну может чем то и похожи, только вот пока не пойму чем((9
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
26.09.2010, 15:20     Классы #6
Вот допустим с структурами все понятно, с функциями тоже
Так ведь по большому счету структуры от классов только ключевым словом и отличаются

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

Вот уже полгода учу С++ и как бы все было относительно понятно (почти))), но вот щас дошел до классов
что-то долго ты до них добирался. Я третий месяц изучаю С++ и уже сыт этими классами
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.09.2010, 15:23  [ТС]     Классы #7
Цитата Сообщение от NikolaWhite Посмотреть сообщение
Так ведь по большому счету структуры от классов только ключевым словом и отличаются


прислушаюсь к авторитетному мнению и удалю из списка к прочтению



что-то долго ты до них добирался. Я третий месяц изучаю С++ и уже сыт этими классами
Как в универе программа учебная идет так и учим)))
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.09.2010, 15:26     Классы #8
Цитата Сообщение от NikolaWhite Посмотреть сообщение
Так ведь по большому счету структуры от классов только ключевым словом и отличаются
хм,и только ?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.09.2010, 15:38     Классы #9
Цитата Сообщение от Asics^ Посмотреть сообщение
хм,и только ?
Не совсем. По умолчанию члены структуры имеют открытый доступ. Также структуры по умолчанию наследуются открыто.
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.09.2010, 15:41  [ТС]     Классы #10
Ну дак что? Может кто помочь, объяснить на примерах что к чему???
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.09.2010, 15:45     Классы #11
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
template<class T>//Шаблон
class Int//Класс Int
{
public:
    Int(){a=5;}//Конструктор без параметров
    virtual void input(){};//Виртуальная функция input
    virtual void output(){};//Виртуальная функция output
    Int<T> operator+(const Int<T>& Ob)//Перегрузка оператора сложения
    {
        Int Temp;
        Temp.a=a+Ob.a;
        return Temp;
    }
protected:
    T a;//Переменная а типа T
};
 
template<class T>//Шаблон
class ConsoleInt:public Int<T>//Класс ConsoleInt производный от Int<T>
{
public:
    ConsoleInt():Int() {}//Конструктор без параметров
    void input()//Реализация функции input
    {
        std::cin>>a;
    }
    void output()//Реализация output
    {
        std::cout<<a<<'\n';
    }
};
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.09.2010, 16:25     Классы #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ

Не по теме:

Lavroff, что ж ты так над бедным robert19'ом издеваешься


robert19, давай рссмотрим на примере. Нужно создать класс, объекты которого представляют прямоугольники в двумерном пространстве, грани которых параллельны осям координат.
Для начала выберем название класса, наиболее отражающее сущность которую он представляет и сделаем небольшую заготовку:
C++
1
2
class Rectangle {
};
Далее нужно решить какие данные нужно хранить, для того чтобы однозначно представить прямоугольник. Наиболее простой и правильный вариант - хранить координаты верхнего левого и нижнего правого углов прямоугольник. Для хранения координат создадим структуру, представляющую точку в двумерном пространстве, т.е. хранящую две координаты - x и y.
C++
1
2
3
4
struct Point {
  double x;
  double y;
};
Заведем в нашем классе два поля типа Point для хранение углов прямоугольника.
C++
1
2
3
4
5
class Rectangle {
private:
  Point topLeft;
  Point bottomRight;
};
private - это спецификатор доступа. Что такое спецификаторы доступа и с чем их едят - см. в литературе (напомню Павловская идет лесом). Скажу лишь что к секции private имеют доступ только экземпляры того класса, в котором данная секция была объявлена. Зачем помещать данные именно в эту секцию? Да для того, чтобы никто из вне класса никак не смог их попортить.
Перед нами встает вопрос, а как собственно установить значения углов прямоугольника извне класса? Очень просто - завести соответсвующие методы или функции-члены для установки данных значений, не забыв поместить из в секцию public:
C++
1
2
3
4
5
6
7
8
9
10
11
class Rectangle {
public:
  void setTopLeft(const Point& pt) {
    topLeft = pt;
  }
  
  void setBottomRight(const Point& pt) {
    bottomRight = pt;
  }
// ...
};
Что такое const читаем в литературе (Павловская сидит и молчит в трапочку).
Теперь мы уже можен написать подобный код:
C++
1
2
3
4
5
6
7
Point tl = { 1.0, 1.0 };
Point br = { 2.0, 2.0 };
 
Rectangle r;
 
r.setTopLeft(tl);
r.setBottomRight(br);
Как то получается не очень красиво, что мы тратим аж две лишних строки, для инициализация прямоугольника нужными нам значениями его углов. Хотель бы сократить эту запись. Для того чтобы инициализировать объект класса нужным образом есть конструкторы - курим книги (Павловскую не раскуриваем):
C++
1
2
3
4
5
6
7
8
class Rectangle {
public:
  Rectangle(const Point& tl, const Point& br) {
    topLeft = tl;
    bottomRight = br;
  }
  // ...
};
Теперь записать можно так:
C++
1
2
3
4
Point tl = { 1.0, 1.0 };
Point br = { 2.0, 2.0 };
 
Rectangle r(tl, br);  // Вот здесь будет вызван конструктор
Проблему с установкой решили, но ведь нужно как то получать значения углов прямоугольника, инача на кой он нам сдался. Заведем методы получения нужных нам данных:
C++
1
2
3
4
5
6
7
8
9
10
class Rectangle {
public:
  const Point getTopLeft() const {
    return topLeft;
  }
 
  const Point getBottomRight() const {
    return bottomRight;
  }
};
Теперь мы можем получать значения углов:
C++
1
2
3
// ...
Point pt1 = r.getTopLeft();
Point pt2 = r.getBottomRight();
Сами методы получение и установки углов треугольника мало чего дают, мы с такими же темпами могли и структурами обойтись. Нужно добвать к классу какого либо полезного поведения, например, вычисления ширины и высоты прямоугольника:
C++
1
2
3
4
5
6
7
8
9
10
11
class Rectangle {
public:
  // ...
  const double Width() const {
    return bottomRight.x - topLeft.x;
  }
 
  const double Height() const {
    return topLeft.y - bottomRight.y;
  }
};
Теперь соберем все вместе:
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
struct Point {
  double x;
  double y;
};
 
class Rectangle {
public:
  Rectangle(const Point& tl, const Point& br) {
    topLeft = tl;
    bottomRight = br;
  }
 
  void setTopLeft(const Point& pt) {
    topLeft = pt;
  }
  
  void setBottomRight(const Point& pt) {
    bottomRight = pt;
  }
 
  const Point getTopLeft() const {
    return topLeft;
  }
 
  const Point getBottomRight() const {
    return bottomRight;
  }
 
  const double Width() const {
    return bottomRight.x - topLeft.x;
  }
 
  const double Height() const {
    return topLeft.y - bottomRight.y;
  }
 
private:
  Point topLeft;
  Point bottomRight;
};
С использованием, думаю, разберетесь.
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.09.2010, 16:49  [ТС]     Классы #13
Огромное спс. Вроде немного дошло
Chainyk
 Аватар для Chainyk
15 / 15 / 1
Регистрация: 24.08.2010
Сообщений: 94
27.09.2010, 18:19     Классы #14
Класс, ето новый тип:
C++
1
2
3
4
5
6
7
8
class A
{
int i;
}
void main ()
{
A a;
}
Сейчас а - екземпляр класса А и т.д.
Почитайте Либерти, Джонс "Освой самостоятельно С++ за 21 день", книга очень доходчива
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2010, 18:25     Классы
Еще ссылки по теме:

C++ Классы в c++
C++ Классы
C++ Классы

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

Или воспользуйтесь поиском по форуму:
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
27.09.2010, 18:25  [ТС]     Классы #15
Цитата Сообщение от Chainyk Посмотреть сообщение
Класс, ето новый тип:
C++
1
2
3
4
5
6
7
8
class A
{
int i;
}
void main ()
{
A a;
}
Сейчас а - екземпляр класса А и т.д.
Почитайте Либерти, Джонс "Освой самостоятельно С++ за 21 день", книга очень доходчива
Пиши сюда: Недопустимые локальные определения функций
Yandex
Объявления
27.09.2010, 18:25     Классы
Ответ Создать тему
Опции темы

Текущее время: 05:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru