Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > inline функции и абстрактные типы данных


Автор: qnx 2.5.2006, 23:28
по инлайн функциям меня интересует просто чем они от обычных отличаются........(на сколько я понял они подставляют на место вызова часть кода.......и за счет этого прога выполняется быстрее, хотя может больше занимать)          По АТД у меня вобще нет никакого поятия.................      и еще меня интересует что такое открытые и закрытые подпрограммы.......в чем в них разница????..................заранее благодарю........qnx@ukr.net    icq 198830403  

Автор: Romikgy 2.5.2006, 23:41
Цитата(qnx @  2.5.2006,  22:28 Найти цитируемый пост)
по инлайн функциям меня интересует просто чем они от обычных отличаются........(на сколько я понял они подставляют на место вызова часть кода.......и за счет этого прога выполняется быстрее, хотя может больше занимать)    

Да 
Цитата(qnx @  2.5.2006,  22:28 Найти цитируемый пост)
 еще меня интересует что такое открытые и закрытые подпрограммы.......в чем в них разница????...

только наверное методы, 
открытые можно вызвать из любого кода,
закрытые только внутри принадлежащего класса/структуры,
вроде так , если че гуру поправят smile 

Автор: BreakPointMAN 3.5.2006, 00:21
qnx, насчет inline-функций почитай вот этот топик: http://forum.vingrad.ru/index.php?showtopic=82646&view=all, все разжевано донельзя...

 

Автор: maxim1000 3.5.2006, 00:47
Цитата(qnx @  2.5.2006,  22:28 Найти цитируемый пост)
подставляют на место вызова часть кода.......и за счет этого прога выполняется быстрее, хотя может больше занимать)

inline'овые вставки - только начало оптимизации
когда идёт команда, а после неё вызов функции, компилятору не так-то просто (да и не всегда возможно) оптимизировать эти два куска вместе
можно рассмотреть такой пример:
Код

void f(int mode)
{
  if(mode==1)
  {
    //тут много всякого кода
  }
  else
  {
    //тут много другого всякого кода
  }
}
void main()
{
  f(1);
}

интересно то, что, если компилятор решит сделать f inline, то станет видно, что else-часть можно даже не включать в программу
аналогично со всякими функциями доступа к членам класса типа get/set, если они реализованы прозрачно (т.е. просто транслируют доступ к переменной), то вставка их в место вызова может одновременно и уменьшить, и ускорить программу
и т.д., и т.п.
мне понравилась книжка Efficient C++ Programming Techniques - про inline'ы там очень даже немало расписано 

Автор: MAKCim 3.5.2006, 07:14
Цитата

закрытые только внутри принадлежащего класса/структуры,

и из друзей (методы, классы/структуры) 

Автор: qnx 3.5.2006, 09:35
inline функции я вроде понял..........я и так предпологал, что они так работают......просто в литературе нигде этого четко написано небыло,.........а меня больше интересует вопрос по поводу абстраутных типов данных................ 

Автор: Romikgy 3.5.2006, 11:42
Цитата(qnx @  3.5.2006,  08:35 Найти цитируемый пост)
 абстраутных типов данных

имхо абстрактными могут быть только методы, т.е. это метод объявленый , но не описанный smile
К нему нельзя обратися , его сначала надо "переписать", плюс к этому он еще должен быть виртуальным smile 

Автор: likehood 3.5.2006, 12:07
Что касается АТД (абстр. типы данных), то это такие структуры данных, в которых не оговорена их реализация. Например, стек. Его можно реализовать в виде массива либо в виде списка, в зав-ти от задачи. При этом робота с обоими стеками идет с помощью одинаковых операций (push, pop, top), но реализованных по-разному. 

Автор: Любитель 3.5.2006, 13:29
Абстрактный класс - класс в котором есть хотя бы один чисто виртуальный (абстрактный) метод.
Удобно для создания интерфейса класса. Инстансировать объекты этого класса нельзя (можно только наследуемых классов), зато можно исполльзовать указатели на наш класс, можно также ставить вызов абстрактных методов, в других методах. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)