MyTetra Share
Делитесь знаниями!
Специализация шаблона класса, Частичная, Полная, Указатели и частичная специализация, конструктор, принимающий объект initializer_list, class std::string
Время создания: 13.06.2020 19:20
Раздел: C++ - Примеры кода - Работа на уроке
Запись: Shut913/Tetra-notes-Programming/master/base/1592065226xf40mhw015/text.html на raw.githubusercontent.com

#include <iostream>

#include <cstring>

#include <initializer_list>

#include <string>

using namespace std;


//template <class T>

//class Repository

//{

//private:

// T _value;

//public:

// Repository(T value) : _value{ value } {}

//

// ~Repository() {}

//

// void print()

// {

// std::cout << _value << '\n';

// }

//};

//

//template<>

//void Repository<double>::print()

//{

// cout << scientific << _value;

//}

//

//void main()

//{

// Repository<int> n(7);

// Repository<double> d(8.4);

//

// n.print();

// d.print();

//}


//// ==== Специализация шаблона класса

//template <class T>

//class Block

//{

//private:

// T _arr[8];

//public:

// void set(int index, const T& val)

// {

// _arr[index] = val;

// }

// const T& get(int index)

// {

// return _arr[index];

// }

//};

//

//template<>

//class Block<bool>

//{

//private:

// unsigned char _data;

//public:

// Block() : _data{} {}

// void set(int index, bool value)

// {

// unsigned char mask = 1 << index;

//

// if (value)

// _data |= mask;

// else

// _data &= ~mask;

// }

// bool get(int index)

// {

// unsigned char mask = 1 << index;

//

// return (_data & mask) != 0;

// }

//};

//

//void main()

//{

// Block<int> a;

// for (int i{}; i < 8; i++)

// a.set(i, i);

// for (int i{}; i < 8; i++)

// cout << a.get(i) << " ";

// cout << "\n";

//

// Block<bool> b;

// for (int i{}; i < 8; i++)

// b.set(i, i % 5);

// for (int i{}; i < 8; i++)

// cout << (b.get(i) ? "true" : "false") << " ";

// cout << "\n";

//}


// ======= Частичная специализация шаблона

//template <class T, int size>

//class StaticArray

//{

//private:

// T _array[size];

//

//public:

// T* getArray() { return _array; }

//

// T& operator[](int index)

// {

// return _array[index];

// }

//};

//

//template <typename T, int size>

//void print(StaticArray<T, size>& arr) // void print(StaicArray<int, 5>& arr)

//{

// for (int i{}; i < size; i++)

// cout << arr[i] << ' ';

// cout << "\n";

//}

//

////// Полная специализация

////template<>

////void print(StaticArray<char, 14>& arr)

////{

//// for (int i{}; i < 14; i++)

//// cout << arr[i];

//// cout << "\n";

////}

//

//// Частичная специализация

//template<int size>

//void print(StaticArray<char, size>& arr)

//{

// for (int i{}; i < size; i++)

// cout << arr[i];

// cout << "\n";

//}

//

//void main()

//{

// StaticArray<int, 5> a;

// for (int i{}; i < 5; i++)

// a[i] = i;

//

// print(a);

//

// StaticArray<char, 14> b;

// strcpy_s(b.getArray(), 14, "Hello, World!");

// print(b);

//

// StaticArray<char, 20> c;

// strcpy_s(c.getArray(), 20, "Hello, World!!!!!!!");

// print(c);

//}


// ==== Указатели и частичная специализация

//template <class T>

//class Repository

//{

//private:

// T _value;

//public:

// Repository(T value)

// {

// _value = value;

// }

//

// ~Repository()

// {

// }

//

// void print()

// {

// std::cout << _value << '\n';

// }

//};

//

//template <typename T>

//class Repository<T*>

//{

//private:

// T* _value;

//public:

// Repository(T* value)

// {

// _value = new T{ *value };

// }

// ~Repository()

// {

// delete _value;

// }

// void print()

// {

// std::cout << (*_value) << '\n';

// }

//};

//

//void main()

//{

// Repository<int> a(6);

// a.print();

//

// int x = 8;

// Repository<int*> b(&x);

// b.print();

// x = 10;

// b.print();

//}


// ===== std::initializer_list

//class Container

//{

//private:

// int _len;

// int* _arr;

//public:

// Container() : _len{}, _arr{nullptr} {}

//

// Container(int len) : _len{ len }

// {

// _arr = new int[_len];

// }

//

// // конструктор, который принимает объект initializer_list

// Container(const std::initializer_list<int>& list):

// Container(list.size())

// {

// int count = 0;

// for (auto& element : list)

// {

// _arr[count] = element;

// ++count;

// }

// }

//

// ~Container()

// {

// delete[] _arr;

// _arr = nullptr;

// }

// int getLen() { return _len; }

//

// int& operator[](int index) { return _arr[index]; }

//};

//

//void main()

//{

// Container a;

//

// for (int i{}; i < 7; i++)

// cout << a[i] << "\n";

//}


// ===== class std::string

// char* \0

//= – присваивание

//+ – конкатенация(объединение строк)

//+= – присваивание с конкатенацией

//== – равенство

//!= – неравенство

//< – меньше

// <= – меньше или равно

//> – больше

//>= – больше или равно

//[] – индексация

//void main()

//{

// string str;

// // str.assign();

// // str.append();

// // str.insert();

// // str.replace();

// // str.compare();

// // str.length();

//

// // str.c_str();

//}

Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования