if ((!words.empty() && words.find(word) != words.end() && word_str != words.end()->first) || std::string(word) == words.end()->first)
template< typename TDataType >
class ListTraits
{
public:
// ...
template< typename TNodeType >
inline static void AddHead( TNodeType node, TDataType data );
// ...
};
template<>
class ListTraits<Storage_device*>
{
public:
// ...
template< typename TNodeType >
inline static void AddHead( TNodeType node, Storage_device* data );
// ...
};
template< typename TNodeType, typename TDataType >
class List
{
// Тип используемых черт.
using Traits = ListTraits<TDataType>;
TNodeType *head, *tail;
int count;
public:
// ...
void AddHead(TDataType data);
// ...
};
template< typename TNodeType, typename TDataType >
void List<TNodeType, TDataType>::AddHead( TDataType data )
{
// ...
Traits::template AddHead( temp, data );
// ...
};
template <typename Node, typename DataType>
class List
{
Node *head, *tail;
int count;
public:
// ...
void AddHead(DataType data);
};
template <typename Node>
class List<Node, Storage_device*>
{
using DataType = Storage_device*;
Node *head, *tail;
int count;
public:
// ...
void AddHead(DataType data);
};
template<typename = std::enable_if<std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data); // specialized version
template<typename = std::enable_if<!std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data); // general version
template<typename Node, typename DataType>
class List {
//...
public:
template<typename = std::enable_if<std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data);
template<typename = std::enable_if<!std::is_same<DataType, Storage_device*>>::type>
void AddHead(DataType data);
};
template<typename Node, typename DataType>
template<typename = std::enable_if<std::is_same<DataType, Storage_device*>>::type>
void List<Node, DataType>::AddHead(DataType data);
template<typename Node, typename DataType>
template<typename = std::enable_if<!std::is_same<DataType, Storage_device*>>::type>
void List<Node, DataType>::AddHead(DataType data);
Path Path::operator + (const Path &pth) const
{
Path obj;
int buff_size = strlen(this->path) + strlen(pth.path) + 1;
obj.path = new char[buff_size]; // утекло то, что в конструкторе без параметров создано
strcpy_s(obj.path, buff_size, this->path); // количество символов для копирования больше чем в this->path
...
}
#include <algorithm>
class StudentList
{
public:
StudentList();
~StudentList();
Student& add(); // добавить пустого студента и выдать ссылку на новенького
size_t size() const { return fSize; }
Student& operator[](size_t i) { return *fData[i]; } // можно также наладить проверку диапазона — сделай это сам…
const Student& operator[](size_t i) const { return *fData[i]; }
void clear();
private:
typedef Student* PStudent;
PStudent* fData;
size_t fSize, fCapacity; // реальное кол-во студентов и на сколько студентов у нас заведено памяти.
// Указатели [fSize..fCapacity) резервные, их значение не определено и высвобождать
// их не надо.
enum { BLOCK_SIZE = 16; };
StudentList(const StudentList&) {} // копирование запрещаем, хочешь — реализуй сам и вынеси в public
StudentList& operator=(const StudentList&) { return *this; } // аналогично
};
StudentList::StudentList(); : fData(NULL), fSize(0), fCapacity(0) {}
Student& StudentList::add()
{
// Убедиться, что массива хватает; если нет — расширить
if (fSize >= fCapacity) {
size_t newCapacity = fCapacity + BLOCK_SIZE;
PStudent* newData = new PStudent[newCapacity];
std::copy(fData, fData + fSize, newData);
delete[] fData;
fData = newData;
fCapacity = newCapacity;
}
// Завести нового студента
Student* r = new Student;
fData[fSize++] = r;
return *r;
}
void StudentList::clear()
{
for (size_t i = 0; i < fSize; ++i)
delete fData[i];
delete[] fData;
fData = NULL;
fSize = 0;
fCapacity = 0;
}
StudentList::~StudentList()
{
clear();
}
#include <string>
class AcademyGroup
{
public:
std::string name;
StudentList students; // при желании можно заинкапсулировать и его.
};
std::vector<std::unique_ptr<Student>>
.std::deque<Student>
. char * str1 = new char[6]; // тут вы выделяете 6 байт памяти
// и присваиваете адрес выделенной памяти переменной str1
str1 = "Lorem"; // тут вы теряет ранее полученный адрес (утечка памяти)
// и переменной str1 присваиваете новый адрес из (not write access) блока памяти.
str1[5] = '\0'; // тут у вас уже проблема, так как на эту область памяти стоит защита от записи.
#include <iostream>
using namespace std;
int main()
{
int n;
char c;
cin >> n;
cin.get(c);
cout << n << " " << int(c) << endl;
return 0;
}
[guest@localhost cpp]$ .iso++ t.cpp -o t
[guest@localhost cpp]$ ./t
123
123 10
[guest@localhost cpp]$
bool* nptr = new bool;
void Select1Player()
{
COORD coord = { 50, 10 };
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, 0);
system("cls");
SetConsoleTextAttribute(hStdOut,
BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY | BACKGROUND_RED);
SetConsoleCursorPosition(hStdOut, coord);
cout << "1 PLAYER";
coord.X = 50;
coord.Y = 11;
SetConsoleTextAttribute(hStdOut,
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
SetConsoleCursorPosition(hStdOut, coord);
cout << "2 PLAYERS";
}
//выводит выбор параметров и выделяет "2 players"
void Select2Players()
{
COORD coord = { 50, 10 };
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, 0);
system("cls");
SetConsoleTextAttribute(hStdOut,
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
SetConsoleCursorPosition(hStdOut, coord);
cout << "1 PLAYER";
coord.X = 50;
coord.Y = 11;
SetConsoleTextAttribute(hStdOut,
BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY | BACKGROUND_RED);
SetConsoleCursorPosition(hStdOut, coord);
cout << "2 PLAYERS";
}
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
void Select1Player();
void Select2Players();
int main()
{
bool player2 = false;
Select1Player();
char c = 0;
while(c != 13)
{
c = _getch();
if((c == 72 || c == 80) && player2 == false)//38 и 40 - стрелки вверх и вниз у таблице ASCII
{
player2 = true;
Select2Players();
}
else if(c == 72 || c == 80)
{
player2 = false;
Select1Player();
}
}
return 0;
}
//выводит выбор параметров и выделяет "1 player"
void Select1Player()
{
COORD coord = { 50, 10 };
static HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut,
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
system("cls");
SetConsoleCursorPosition(hStdOut, coord);
SetConsoleTextAttribute(hStdOut,
BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY | BACKGROUND_RED);
cout << "1 PLAYER";
SetConsoleTextAttribute(hStdOut,
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
coord = { 50, 11 };
SetConsoleCursorPosition(hStdOut, coord);
cout << "2 PLAYERS";
}
//выводит выбор параметров и выделяет "2 players"
void Select2Players()
{
COORD coord = { 50, 10 };
static HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut,
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
system("cls");
SetConsoleCursorPosition(hStdOut, coord);
SetConsoleTextAttribute(hStdOut,
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "1 PLAYER";
SetConsoleTextAttribute(hStdOut,
BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY | BACKGROUND_RED);
coord = { 50, 11 };
SetConsoleCursorPosition(hStdOut, coord);
cout << "2 PLAYERS";
}