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

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

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

Для чего нужны интерфейсы? - C++

18.03.2014, 08:44. Просмотров 1003. Ответов 13
Метки нет (Все метки)

Объясните на пальцах для чего нужны интерфейсы, как я понял они описывают методы и свойства, которые при наследовании классами должны были реализовать их, а для чего это делать?
Читаю так же COM объекты, там все построено на интерфейсах и я понимаю, что не понимаю до конца смысла интерфейсов.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 08:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для чего нужны интерфейсы? (C++):

Для чего нужны указатели? - C++
Кто может объяснить для чего нужны указатели и смысл их? в интернете одна муть и еще для чего нужно new delete

Для чего нужны callback-функции - C++
Для чего нужны callback-функции? И можно привести какой-нибуль пример по их использованию.

Для чего нужны файлы с расширением .h, .c? - C++
Не подскажите, для чего нужен (.h) и (.c) файл? А (.cpp)? Я читал, что это заголовочный файл, но за зачем он нужен?

Для чего нужны указатели на функции? - C++
для чего нужны эти указатели на функции... не проще ли вызвать саму функцию, чем заводить под нее указатель и им пользоваться...

Для чего нужны заголовочные файлы? - C++
Ещё раз всем здрасьте , последний вопрос в котором я не могу разобраться - Для чего нужны заголовочные файлы ??? Для чего нужны эти файлы...

для чего нужны хеш таблицы? - C++
для чего нужны хеш таблицы? если есть массивы )

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
18.03.2014, 09:00 #2
Цитата Сообщение от iser Посмотреть сообщение
Объясните на пальцах для чего нужны интерфейсы
чтобы общаться... методы которые предоставляет тот или иной класс нужны для взаимодействия с внешним миром, представь себе класс, у которого все методы и данные закрыты, как ты к нему обратишься и вообще для чего он нужен?(ну только если он не базовый, а просто закрытый полностью отдельный класс)
0
0x10
2463 / 1635 / 238
Регистрация: 24.11.2012
Сообщений: 4,022
18.03.2014, 09:16 #3
dzrkot, автор как бы про другие интерфейсы спрашивает)

iser, А по теме: читайте книги. Да даже в википедии есть статья с примерами. http://ru.wikipedia.org/wiki/%D0%98%...BD%D0%B8%D0%B5)
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
18.03.2014, 09:17 #4
Цитата Сообщение от 0x10 Посмотреть сообщение
dzrkot, автор как бы про другие интерфейсы спрашивает)
ок =((
0
iser
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
18.03.2014, 09:19  [ТС] #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
#include <stdio.h>
 
class ILoad
{
public:
    virtual void StartLoading()=0;
    virtual bool IsFinish()=0;
};
 
class CImg : public ILoad
{
public:
    CImg(){};
    ~CImg(){};
private:
    virtual void StartLoading()
    {
        printf("Img -> StartLoading");
    }
    virtual bool IsFinish()
    {
        return true;
    }
};
 
class CVideo : public ILoad
{
public:
    CVideo(){};
    ~CVideo(){};
private:
    virtual void StartLoading()
    {
        printf("Video -> StartLoading");
    }
    virtual bool IsFinish()
    {
        return true;
    }
};
 
void main()
{
    CImg a;
    CVideo b;
    a.StartLoading();
    if( a.IsFinish() )
    {
        printf(" a -> IsFinish = TRUE ");
    }
}
0
0x10
2463 / 1635 / 238
Регистрация: 24.11.2012
Сообщений: 4,022
18.03.2014, 09:20 #6
iser, можно написать функцию, которая принимает ILoad и передавать объект любого конкретного типа, реализующего этот интерфейс.
0
iser
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
18.03.2014, 09:45  [ТС] #7
Так так, извиняюсь за глупый вопрос.
Если объект, реализующий интерфейс ILoad, содержит реализацию метода который не описывает ILoad, он тоже передается?
Я понимаю так:
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
#include <stdio.h>
 
class ILoad
{
public:
    virtual void StartLoading()=0;
};
 
class CImg : public ILoad
{
public:
    CImg(){};
    ~CImg(){};
    void Prew()
    {
       printf("Img -> Prew");
    }
private:
    virtual void StartLoading()
    {
        printf("Img -> StartLoading");
    }
};
 
 
void main()
{
    void Func(ILoad a){
          a.StartLoading();
          a.Prew(); // Вот это вызовется?
    }
}
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
18.03.2014, 10:25 #8
Цитата Сообщение от iser Посмотреть сообщение
a.Prew(); // Вот это вызовется?
нет
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 10:38 #9
Цитата Сообщение от iser Посмотреть сообщение
ILoad a
Так не создастся объект.

Добавлено через 4 минуты
Цитата Сообщение от iser Посмотреть сообщение
Если объект, реализующий интерфейс ILoad, содержит реализацию метода который не описывает ILoad, он тоже передается?
Передаётся куда? Из ILoad в производный класс? Но если его нет, то что должно передаться?
0
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,818
18.03.2014, 11:29 #10
Цитата Сообщение от iser Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ILoad
{
public:
 virtual void StartLoading()=0;
};
class CImg : public ILoad
{
public:
 CImg(){};
 ~CImg(){};
 void Prew()
 {
 printf("Img -> Prew");
 }
private:
 virtual void StartLoading()
 {
 printf("Img -> StartLoading");
 }
};
Пример использования CImg
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//void FuncError( ILoad a )  /*  error C2259: ILoad: невозможно создать экземпляр абстрактного класса  */
//{
//  a.StartLoading();
//}
 
void FuncOK( ILoad* p )
{
    p->StartLoading(); /* метод StartLoading() объявлен в (абстрактном) классе ILoad */
}
 
void main()
{
    CImg im; /* класс CImg является производным от класса ILoad */
    FuncOK( & im ); 
}
0
iser
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
20.03.2014, 21:16  [ТС] #11
Спасибо за ответ, чет на почту не пришли уведомления, поэтому отвечаю с задержкой.
Цитата Сообщение от Alex5 Посмотреть сообщение
void FuncOK( ILoad* p )
ILoad* p - Это указатель на тип класса ILoad? Почему именно указатель?
Цитата Сообщение от Alex5 Посмотреть сообщение
FuncOK( & im );
& im - достает адрес класса CImg, почему именно ссылка, а не указатель на im?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 21:23 #12
Цитата Сообщение от iser Посмотреть сообщение
Почему именно указатель?
Про виртуальность и полиморфизм почитайте.
Цитата Сообщение от iser Посмотреть сообщение
& im - достает адрес класса CImg, почему именно ссылка, а не указатель на im?
Где здесь ссылка? Функция принимает указатель (адрес), ей передаётся адрес объекта im.
0
iser
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
20.03.2014, 21:39  [ТС] #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Про виртуальность почитайте.
Я читал, но видимо до конца не понял, для этого необходимо указывать виртуальные методы? Или я что то не понимаю.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 21:50 #14
Указатель или ссылка на базовый класс может быть связана с объектом производного. Если метод вирутальный, то вызов его будет по типу объекта, с которым связан указатель или ссылка, если не виртуальный, то по типу указателя.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2014, 21:50
Привет! Вот еще темы с ответами:

Для чего нужны вложенные структуры? - C++
Скажите пожалуйста для чего нужны вложенные структуры и где их используют?

Для чего нужны битовые операции? - C++
Здравствуйте. Дошел в книге Стенли до битовых операций, но никак не могу понять их предназначение. Где вообще они используются и как с...

try catch throw для чего нужны? - C++
Для чего нужны эти операторы? Линканите пожалуйста статью, где доходчиво объяснено их применение, в разных вариантах (например я видел...

Объяснить для чего нужны флаги в программировании - C++
Всем привет, объясните, пожалуйста, для чего нужны флаги. И как они работают( на примере). Спасибо!


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.03.2014, 21:50
Ответ Создать тему
Опции темы

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