Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 13940|Отговор: 0

[C++] Мислене за шаблони на C++

[Копирай линк]
Публикувано в 4.10.2014 г. 20:45:19 ч. | | |
В езиците на високо ниво използваме претоварване за функции, което се прилага при функции с различни функции, но със същия брой параметри, и шаблони са необходими за различни типове и същия брой параметри
C++ аплет

  1. #include<iostream>
  2. using namespace std;

  3. template <class T>
  4. T max(T a,T b)
  5. {
  6. return         a>b?a:b;
  7. }

  8. int main()
  9. {
  10. int a,b;cin>>a>>b;
  11. cout<<max(a,b);
  12. return 0;
  13. }
Копирай код

Това е прост пример: шаблонът за ключови думи<клас T> е началото на структурата на шаблона, така че не се налага да пишем няколко C++ кода с една и съща функция многократно, когато търсим максималната стойност
Обърнете внимание, че при извикване на функция нейният тип автоматично се съвпада. Не е нужно да се показва.
Горното е най-основната употреба, но ще се сблъскаме със следните ситуации

  1. #include<iostream>
  2. using namespace std;

  3. template <class T,class E>
  4. E max(T a,E b)
  5. {
  6. return         a>b?a:b;
  7. }

  8. int main()
  9. {
  10. int a;float b;cin>>a>>b;
  11. cout<<max(a,b);
  12. return 0;
  13. }
Копирай код

Какво да правим, когато функцията ни изисква два различни типа, мисля, че ще разберете след като прочетете горния код. Но това, което ги общо, е, че типовете се съвпадат автоматично.
Всъщност имаме и грешки, ако не можем да съвпаднем добре с типа, тоест "главата на бика не е правилна", тогава автоматичното съвпадение на компилатора ще промени типа параметър според правилата за имплицитно преобразуване на типове, което в крайна сметка води до загуба на точност на резултата.
Погледни кода, можеш да опиташ.
  1. #include<iostream>
  2. using namespace std;

  3. template <class T,class E>
  4. E max(T a,E b)
  5. {
  6. return         a>b?a:b;
  7. }

  8. int main()
  9. {
  10. int a;float b;cin>>a>>b;
  11. cout<<max(a,b);
  12. return 0;
  13. }
Копирай код
Горното съдържание не е много трудно, но има и много места, които могат да бъдат изследвани, не знам какво мислите





Предишен:c Мини програма, написана от Inline
Следващ:Публикувах лого, направено за моя форум, и го показах на всички!
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com