Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
1

Основы ООП

16.09.2013, 11:10. Показов 1122. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте! Уже второй день пытаюсь разобраться и хорошего ответа так и не нашел. На форуме подобные вопросы видел, и википидею читал, но полной ясности нет.
Вопрос 1 - "Чем отличается абстрактный класс от интерефеса?"
Вопрос 2 -"Зачем вообще нужен интрефейс?"
Судь по книжкам - абстрактынй класс, это класс которые имеет хотя бы одну вирутальную функции. Т.е любые другие методы и переменные, главное чтобы одна вирутальная функция была. И так же содержит реализацию методов.
Интерфейс же просто содержит объявление методов, как виртуальные функции, и не содержит реализации. Надеюсь я правильно понимаю.
Но тогда я не понимаю зачем нужен интрфейс...
Помогите пожалуйста разобраться)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2013, 11:10
Ответы с готовыми решениями:

Основы ООП
Доброго времени суток, немного запутался в основах. Есть ли возможность сделать у дочерних классов...

Знаю ли я основы ООП?
ООП я изучал но не применял, ну если не считать собственный класс string и примитивную обертку...

Основы ООП, ввод данных
Собственно, осваивая основы ООП и выполняя заодно частичное задание с универа(1 курс :scratch:)...

ООП Создание основы класса
Здравствуйте, получил задание, но немного недопонимаю как это сделать, с чего начать. Помогите...

7
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
16.09.2013, 11:18 2
Может тут понятно изложено? =)
0
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 13:56  [ТС] 3
reisal78, Я до этого уже читал, попробывал вчитаться ещё, неплохо было бы на примере более конкретной задачи, или желательно задача+код.
0
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 513
Записей в блоге: 1
16.09.2013, 14:04 4
ALeXUI_1, в интерфейсе описаны только методы, а в абстактном классе методы и поля. При чем не все методы абстрактного класса обязательно абстрактные
0
4854 / 2654 / 912
Регистрация: 29.11.2010
Сообщений: 5,727
16.09.2013, 14:49 5
В кратце, интерфейс только описывает функционал, а абстрактный класс реализует часть функционала наследников.
0
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 14:53  [ТС] 6
lemegeton, Т.е. мы наследуемся от интрефейса, и переопределяем его описанные виртуальные методы? Ну а какой в этом смысл, если мы будем переопредять, можно просто создать новый класс, и определить эти методы..
Извините, если что-то не помниаю, очень хочу дойти до истины
И попутный вопрос, где бы найти простые задачки по ооп, чтобы от простого к сложному идти. И очень желаетльно с решениями, чтобы не просто писать как думаешь, а потом ещё и проанализировать как было надо.
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
16.09.2013, 14:57 7
Цитата Сообщение от lemegeton Посмотреть сообщение
[функция] возвращает сумму квадратов параметров программирования
чего чего возвращает?
Функция, которая возвращает сумму квадратов параметров
0
4854 / 2654 / 912
Регистрация: 29.11.2010
Сообщений: 5,727
16.09.2013, 15:30 8
Цитата Сообщение от ALeXUI_1 Посмотреть сообщение
lemegeton, Т.е. мы наследуемся от интрефейса, и переопределяем его описанные виртуальные методы?
Да.

Цитата Сообщение от ALeXUI_1 Посмотреть сообщение
Ну а какой в этом смысл
Смысл -- описать и зафиксировать общее поведение для различных сущностей.

Цитата Сообщение от ALeXUI_1 Посмотреть сообщение
если мы будем переопредять, можно просто создать новый класс, и определить эти методы..
Тогда это будут разные сущности, без общего поведения.

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
#include <ctime>
#include <cstdlib>
#include <string>
#include <iostream>
#include <iomanip>
 
class Surface;
 
/**
 * Интерфейс объекта.
 * Общее поведение всех сущностей -- они умеют отрисовываться на поверхности.
 */
class Drawable {
 public:
  virtual void draw(Surface *surface) = 0;
  virtual ~Drawable() {}
};
 
/**
 * "Поверхность", умеющая отрисовывать примитивы и любые другие 
 * фигуры, наследующие интерфейс Drawable.
 */
class Surface {
 public:
  void drawPixel(int x, int y) {
    std::cout << "Pixel{x = " << x << ", y = " << y << "}" << std::endl;
  }
  void drawLine(int x1, int y1, int x2, int y2) {
    std::cout << "Line{x1 = " << x1 << ", y1 = " << y1 << ", " <<
      "x2 = " << x2 << ", y2 = " << y2 << "}" << std::endl;
  }
  void drawCircle(int x, int y, int radius) {
    std::cout << "Circle{x = " << x << ", y = " << y << 
      ", radius = " << radius <<
      "}" << std::endl;
  }
  // поверхность не может отрисовать любой случайный класс
  // ей подавай тип данных, о котором она что-то знает.
  void draw(Drawable *drawable) {
    drawable->draw(this);
  }
};
 
/**
 * Квадрат, умеющий отрисовываться на поверхности
 */
class Square : public Drawable {
 public:
  Square(int x, int y, int side) : x(x), y(y), side(side) {}
  virtual void draw(Surface *surface) {
    surface->drawLine(x, y, x + side, y);
    surface->drawLine(x, y, x, y + side);
    surface->drawLine(x + side, y, x + side, y + side);
    surface->drawLine(x, y + side, x + side, y + side);
  }
 private:
  int x, y, side;
};
 
/**
 * Окружность, умеющая отрисовываться на поверхности
 */
class Circle : public Drawable {
 public:
  Circle(int x, int y, int radius) : x(x), y(y), radius(radius) {}
  virtual void draw(Surface *surface) {
    surface->drawCircle(x, y, radius);
    surface->drawPixel(x, y);
  }
 private:
  int x, y, radius;
};
 
int main(int, char **)  {
  Surface surface;
  
  Drawable* drawables[] = {
    new Square(1, 1, 5),
    new Circle(1, 1, 5),
    new Square(1, 1, 5),
  };
  int numberOfDrawables = sizeof(drawables) / sizeof(drawables[0]);
  
  for (int i = 0; i < numberOfDrawables; ++i) {
    surface.draw(drawables[i]);
  }
 
  for (int i = 0; i < numberOfDrawables; ++i) {
    delete drawables[i];
  }
  return 0;
}
1
16.09.2013, 15:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2013, 15:30
Помогаю со студенческими работами здесь

Ооп. Изучаю основы, обьясните на примере
Класс: форум - сайт для общения. Объект форум - собственно любой форум. Тут все понятно. Форумный...

Где могу прочитать про основы ООП?
Где могу прочитать про основы ООП?

Основы ООП. Создание стека через класс
Приветствую всех пользователей форума. Относительно недавно начал осваивать ООП. Было необходимо...

Основы ООП [С++]
Немного знаю Java, написал программу которая по заданным 2-м сторонам и углом между нимию...


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

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