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

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

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

Студворк — интернет-сервис помощи студентам
Объясните на пальцах для чего нужны интерфейсы, как я понял они описывают методы и свойства, которые при наследовании классами должны были реализовать их, а для чего это делать?
Читаю так же COM объекты, там все построено на интерфейсах и я понимаю, что не понимаю до конца смысла интерфейсов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2014, 08:44
Ответы с готовыми решениями:

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

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

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

13
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
18.03.2014, 09:00
Цитата Сообщение от iser Посмотреть сообщение
Объясните на пальцах для чего нужны интерфейсы
чтобы общаться... методы которые предоставляет тот или иной класс нужны для взаимодействия с внешним миром, представь себе класс, у которого все методы и данные закрыты, как ты к нему обратишься и вообще для чего он нужен?(ну только если он не базовый, а просто закрытый полностью отдельный класс)
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.03.2014, 09:16
dzrkot, автор как бы про другие интерфейсы спрашивает)

iser, А по теме: читайте книги. Да даже в википедии есть статья с примерами. http://ru.wikipedia.org/wiki/%... 0%B8%D0%B5)
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
18.03.2014, 09:17
Цитата Сообщение от 0x10 Посмотреть сообщение
dzrkot, автор как бы про другие интерфейсы спрашивает)
ок =((
0
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
18.03.2014, 09:19  [ТС]
Спасибо за быстрый ответ.
Что то все равно не понятно, вот к примеру пример, в нем интерфейс и два класса, каким образом реализовывается общение?
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
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.03.2014, 09:20
iser, можно написать функцию, которая принимает ILoad и передавать объект любого конкретного типа, реализующего этот интерфейс.
0
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
18.03.2014, 09:45  [ТС]
Так так, извиняюсь за глупый вопрос.
Если объект, реализующий интерфейс 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
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
18.03.2014, 10:25
Цитата Сообщение от iser Посмотреть сообщение
a.Prew(); // Вот это вызовется?
нет
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 10:38
Цитата Сообщение от iser Посмотреть сообщение
ILoad a
Так не создастся объект.

Добавлено через 4 минуты
Цитата Сообщение от iser Посмотреть сообщение
Если объект, реализующий интерфейс ILoad, содержит реализацию метода который не описывает ILoad, он тоже передается?
Передаётся куда? Из ILoad в производный класс? Но если его нет, то что должно передаться?
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
18.03.2014, 11:29
Цитата Сообщение от 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
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
20.03.2014, 21:16  [ТС]
Спасибо за ответ, чет на почту не пришли уведомления, поэтому отвечаю с задержкой.
Цитата Сообщение от Alex5 Посмотреть сообщение
void FuncOK( ILoad* p )
ILoad* p - Это указатель на тип класса ILoad? Почему именно указатель?
Цитата Сообщение от Alex5 Посмотреть сообщение
FuncOK( & im );
& im - достает адрес класса CImg, почему именно ссылка, а не указатель на im?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 21:23
Цитата Сообщение от iser Посмотреть сообщение
Почему именно указатель?
Про виртуальность и полиморфизм почитайте.
Цитата Сообщение от iser Посмотреть сообщение
& im - достает адрес класса CImg, почему именно ссылка, а не указатель на im?
Где здесь ссылка? Функция принимает указатель (адрес), ей передаётся адрес объекта im.
0
1 / 1 / 0
Регистрация: 21.01.2013
Сообщений: 40
20.03.2014, 21:39  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Про виртуальность почитайте.
Я читал, но видимо до конца не понял, для этого необходимо указывать виртуальные методы? Или я что то не понимаю.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 21:50
Указатель или ссылка на базовый класс может быть связана с объектом производного. Если метод вирутальный, то вызов его будет по типу объекта, с которым связан указатель или ссылка, если не виртуальный, то по типу указателя.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2014, 21:50
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru