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

Основы ООП - C++

Восстановить пароль Регистрация
 
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 11:10     Основы ООП #1
Здраствуйте! Уже второй день пытаюсь разобраться и хорошего ответа так и не нашел. На форуме подобные вопросы видел, и википидею читал, но полной ясности нет.
Вопрос 1 - "Чем отличается абстрактный класс от интерефеса?"
Вопрос 2 -"Зачем вообще нужен интрефейс?"
Судь по книжкам - абстрактынй класс, это класс которые имеет хотя бы одну вирутальную функции. Т.е любые другие методы и переменные, главное чтобы одна вирутальная функция была. И так же содержит реализацию методов.
Интерфейс же просто содержит объявление методов, как виртуальные функции, и не содержит реализации. Надеюсь я правильно понимаю.
Но тогда я не понимаю зачем нужен интрфейс...
Помогите пожалуйста разобраться)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 11:10     Основы ООП
Посмотрите здесь:

Классы основы C++
C++ ООП Создание основы класса
Основы ветвления C++
Основы ООП, ввод данных C++
Знаю ли я основы ООП? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
16.09.2013, 11:18     Основы ООП #2
Может тут понятно изложено? =)
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 13:56  [ТС]     Основы ООП #3
reisal78, Я до этого уже читал, попробывал вчитаться ещё, неплохо было бы на примере более конкретной задачи, или желательно задача+код.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
16.09.2013, 14:04     Основы ООП #4
ALeXUI_1, в интерфейсе описаны только методы, а в абстактном классе методы и поля. При чем не все методы абстрактного класса обязательно абстрактные
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
16.09.2013, 14:49     Основы ООП #5
В кратце, интерфейс только описывает функционал, а абстрактный класс реализует часть функционала наследников.
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 14:53  [ТС]     Основы ООП #6
lemegeton, Т.е. мы наследуемся от интрефейса, и переопределяем его описанные виртуальные методы? Ну а какой в этом смысл, если мы будем переопредять, можно просто создать новый класс, и определить эти методы..
Извините, если что-то не помниаю, очень хочу дойти до истины
И попутный вопрос, где бы найти простые задачки по ооп, чтобы от простого к сложному идти. И очень желаетльно с решениями, чтобы не просто писать как думаешь, а потом ещё и проанализировать как было надо.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
16.09.2013, 14:57     Основы ООП #7
Цитата Сообщение от lemegeton Посмотреть сообщение
[функция] возвращает сумму квадратов параметров программирования
чего чего возвращает?
Функция, которая возвращает сумму квадратов параметров
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 15:30     Основы ООП
Еще ссылки по теме:

C++ Основы ООП. Создание стека через класс
C++ Где могу прочитать про основы ООП?
C++ C++ основы и литература

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
Yandex
Объявления
16.09.2013, 15:30     Основы ООП
Ответ Создать тему
Опции темы

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