1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Листинг #1 Аргументы по умолчанию у обычных функций #include <iostream> using namespace std; void foo(const int& x=200){ cout << x << "\n"; } int main(){ foo(); //Показывает 200, срабатывает аргумент по умолчанию foo(333); //Показывает 333, срабатывает аргумент назначенный } |
1 2 3 4 5 6 7 8 |
//Листинг #2 Пример, основа к этой теме class MyClass{ vector<int> data; public: void push(int const& value); void show(); }; |
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 |
//Листинг #3 #include <iostream> #include <vector> #include <deque> //Для очереди deque из std::deque using namespace std; template <typename T, typename CONT = vector<T>> // Шаблон с указанием аргумента тип, которого Т и параметром по умолчанию CONT class MyClass{ CONT data; //data - это контейнер, в который мы будем укладывать данные. public: void push(const T& value); //Прототип метода для укладки данных в контейнер void show() const; //Прототип метода для отображения контейнера на экране. }; template <typename T, typename CONT > //Шаблон с аргументом и с аргументом по умолчанию void MyClass<T, CONT>::show() const{ typename CONT::const_iterator it = data.begin(); //Обратите внимание, что здесь у CONT указывается, что это имя типа. for (it=data.begin(); it!=data.end(); ++it) cout << *it << "\t"; //Обход вектора с помощью итератора cout << "\n"; } template <typename T, typename CONT> //Шаблон с аргументом и аргументом по умолчанию void MyClass<T, CONT>::push(const T& value){ data.push_back(value); //Укладываем значение в контейнер data } int main(){ MyClass<int> MyObj1; //Объявили переменную типа MyClass, в угловых скобках указали, что //использовать будем тип int, второй тип не показывали, а значит //сработает аргумент шаблона по умолчанию, как в функциях. MyObj1.push(100); //Укладываем значения в контейнер вовнутрь класса. MyObj1.push(200); MyObj1.push(300); MyObj1.show(); //Выводим данные на экран MyClass<string,deque<string>> MyObj2; //Объявили переменную типа MyClass, //В угловых скобках указали, что тип данных для укладки string //Вторым параметром указали, что контейнером для хранения будет deque, хранящая string MyObj2.push("Test string"); //Укладываем данные MyObj2.push("Two string"); MyObj2.push("three"); MyObj2.show(); //Показываем на экране } |
1 2 3 4 |
//Листинг #a1 MyClass<string,deque<int>> MyObj3; MyObj3.push("25"); //Первый случай MyObj3.push(25); //Второй случай |
Добавить комментарий