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

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

Восстановить пароль Регистрация
 
iser
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
18.03.2014, 08:44     Для чего нужны интерфейсы? #1
Объясните на пальцах для чего нужны интерфейсы, как я понял они описывают методы и свойства, которые при наследовании классами должны были реализовать их, а для чего это делать?
Читаю так же COM объекты, там все построено на интерфейсах и я понимаю, что не понимаю до конца смысла интерфейсов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.03.2014, 09:00     Для чего нужны интерфейсы? #2
Цитата Сообщение от iser Посмотреть сообщение
Объясните на пальцах для чего нужны интерфейсы
чтобы общаться... методы которые предоставляет тот или иной класс нужны для взаимодействия с внешним миром, представь себе класс, у которого все методы и данные закрыты, как ты к нему обратишься и вообще для чего он нужен?(ну только если он не базовый, а просто закрытый полностью отдельный класс)
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.03.2014, 09:16     Для чего нужны интерфейсы? #3
dzrkot, автор как бы про другие интерфейсы спрашивает)

iser, А по теме: читайте книги. Да даже в википедии есть статья с примерами. http://ru.wikipedia.org/wiki/%D0%98%...BD%D0%B8%D0%B5)
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.03.2014, 09:17     Для чего нужны интерфейсы? #4
Цитата Сообщение от 0x10 Посмотреть сообщение
dzrkot, автор как бы про другие интерфейсы спрашивает)
ок =((
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 ");
    }
}
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.03.2014, 09:20     Для чего нужны интерфейсы? #6
iser, можно написать функцию, которая принимает ILoad и передавать объект любого конкретного типа, реализующего этот интерфейс.
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(); // Вот это вызовется?
    }
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
18.03.2014, 10:25     Для чего нужны интерфейсы? #8
Цитата Сообщение от iser Посмотреть сообщение
a.Prew(); // Вот это вызовется?
нет
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 10:38     Для чего нужны интерфейсы? #9
Цитата Сообщение от iser Посмотреть сообщение
ILoad a
Так не создастся объект.

Добавлено через 4 минуты
Цитата Сообщение от iser Посмотреть сообщение
Если объект, реализующий интерфейс ILoad, содержит реализацию метода который не описывает ILoad, он тоже передается?
Передаётся куда? Из ILoad в производный класс? Но если его нет, то что должно передаться?
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
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 ); 
}
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?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 21:23     Для чего нужны интерфейсы? #12
Цитата Сообщение от iser Посмотреть сообщение
Почему именно указатель?
Про виртуальность и полиморфизм почитайте.
Цитата Сообщение от iser Посмотреть сообщение
& im - достает адрес класса CImg, почему именно ссылка, а не указатель на im?
Где здесь ссылка? Функция принимает указатель (адрес), ей передаётся адрес объекта im.
iser
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
20.03.2014, 21:39  [ТС]     Для чего нужны интерфейсы? #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Про виртуальность почитайте.
Я читал, но видимо до конца не понял, для этого необходимо указывать виртуальные методы? Или я что то не понимаю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2014, 21:50     Для чего нужны интерфейсы?
Еще ссылки по теме:

C++ для чего нужны хеш таблицы?
try catch throw для чего нужны? C++
что такое векторы и для чего нужны!? C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 21:50     Для чего нужны интерфейсы? #14
Указатель или ссылка на базовый класс может быть связана с объектом производного. Если метод вирутальный, то вызов его будет по типу объекта, с которым связан указатель или ссылка, если не виртуальный, то по типу указателя.
Yandex
Объявления
20.03.2014, 21:50     Для чего нужны интерфейсы?
Ответ Создать тему
Опции темы

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