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

Переопределение типа(typedef) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.73
Saiberg
 Аватар для Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
07.10.2010, 08:48     Переопределение типа(typedef) #1
Не как не могу разобраться что такое StartDLL/Startup в данном случае

C++
1
2
3
typedef void (*Startup)();
 
Startup StartDll;
Можете записать то, что выше без typedef ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.10.2010, 11:25     Переопределение типа(typedef) #2
для C++ пустые скобки - это типа void
для C - это старый стиль объявлений (до 89 года)

C++
1
void (*StartDll)();
это указатель на функцию, принимающую void, возвращающую void
чтобы каждый раз это дело не писать, эта штука упрощается
ещё на её основе можно делать ещё более сложные типы, в которых, если делать их вручную, можно запутаться
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
07.10.2010, 11:28     Переопределение типа(typedef) #3
typedef void (*Startup)(); //определение типа: указателя на функцию.

Startup StartDll; //создания указателя на функцию.

указателю StartDll можно присвоить адрес функции: имеющей прототип описанный в определении
типа указателя.

Если StartDll хранит адрес функции, то функцию через него можно вызывать(косвенно).

Прмер использования:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
typedef void (*Startup)();
 
void f(){cout<<"Hello\n";}         //реализация функции f.
 
int main(){
Startup StartDll = f;                //записываем адрес функции
StartDll();                             //вызываем функцию через указатель.
system("pause");
return 0;
}
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
07.10.2010, 12:11     Переопределение типа(typedef) #4
Терминологически typedef - это не переопределение типа, и даже не определение типа :-) Более точно, typedef создает синоним для чего-то. В данном случае, читается так: "Startup является синонимом для указателя на функцию, не принимающую никаких аргументов, и возвращающую void."
Saiberg
 Аватар для Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
07.10.2010, 12:50  [ТС]     Переопределение типа(typedef) #5
2Genius Ignat

Не могли бы вы записать тоже самое без typedef ?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
07.10.2010, 13:06     Переопределение типа(typedef) #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
void (*Startup)();
 
void f(){cout<<"Hello\n";}        
 
int main(){
Startup = f;              
Startup();                           
system("pause");
return 0;
}
Yandex
Объявления
07.10.2010, 13:06     Переопределение типа(typedef)
Ответ Создать тему
Опции темы

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