Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
#1

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

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

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

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

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

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

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

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

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

7
reisal78
675 / 588 / 139
Регистрация: 28.04.2013
Сообщений: 1,673
16.09.2013, 11:18 #2
Может тут понятно изложено? =)
0
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 13:56  [ТС] #3
reisal78, Я до этого уже читал, попробывал вчитаться ещё, неплохо было бы на примере более конкретной задачи, или желательно задача+код.
0
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 484
Записей в блоге: 1
16.09.2013, 14:04 #4
ALeXUI_1, в интерфейсе описаны только методы, а в абстактном классе методы и поля. При чем не все методы абстрактного класса обязательно абстрактные
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
16.09.2013, 14:49 #5
В кратце, интерфейс только описывает функционал, а абстрактный класс реализует часть функционала наследников.
0
ALeXUI_1
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
16.09.2013, 14:53  [ТС] #6
lemegeton, Т.е. мы наследуемся от интрефейса, и переопределяем его описанные виртуальные методы? Ну а какой в этом смысл, если мы будем переопредять, можно просто создать новый класс, и определить эти методы..
Извините, если что-то не помниаю, очень хочу дойти до истины
И попутный вопрос, где бы найти простые задачки по ооп, чтобы от простого к сложному идти. И очень желаетльно с решениями, чтобы не просто писать как думаешь, а потом ещё и проанализировать как было надо.
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
16.09.2013, 14:57 #7
Цитата Сообщение от lemegeton Посмотреть сообщение
[функция] возвращает сумму квадратов параметров программирования
чего чего возвращает?
Функция, которая возвращает сумму квадратов параметров
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 15:30
Привет! Вот еще темы с ответами:

Основы массивов - C++
Изучаю массивы, в книге Объектно-ориентированное программирование в C++ Р. Лафоре. #include &lt;iostream&gt; using namespace std; ...

Основы ветвления - C++
Встретился на сайте с такой подачей ветвления: if ( !qwe ) Что значит восклицательный знак, неравенство?

C++ основы и литература - C++
Какую книгу лучше выбрать для изучения основ c++ я взял C++ за 21 день и c 9 дня начал путаться и не понимать тем более в классах не очень...

Классы основы - C++
class a1 // это определение класса { -||-||-; }; a1 b; // как я понимаю это объявление скажите пожалуйста где здесь...


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

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

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