template <class T>
struct is_permitted
{
static constexpr bool value = false;
};
template <>
struct is_permitted<int>
{
static constexpr bool value = true;
};
template <>
struct is_permitted<double>
{
static constexpr bool value = true;
};
template <class T>
struct test
{
test()
{
static_assert(is_permitted<T>::value);
}
};
template <bool X>
struct test
{};
template <>
struct test<true>
{
int a;
};
s[0].pnumber[0] == '2' && s[1].pnumber[1] == '2'
, чтобы сравнить первые два символа массива с двойками. Кроме того зачем тебе переменная max
, которая является float
при том, что в структуре duty
(если использовать правильный перевод, то debt) хранится в виде int
, ведь нигде кроме присвоений она не используется. Вот что получилось у меня, может узнаешь что-то новое. #include <iostream>
struct subscriber
{
int number;
std::string name;
std::string address;
std::string phone_number;
int debt;
};
int main(int argc, char** argv)
{
int subscribers_amount = 0;
std::cout << "Enter the number of subscribers: " << std::endl;
std::cin >> subscribers_amount;
std::vector<subscriber> subscribers(subscribers_amount);
for (auto& subscriber : subscribers)
{
std::cout << "Number: "; std::cin >> subscriber.number;
std::cout << "Debt: "; std::cin >> subscriber.debt;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Name: "; std::getline(std::cin, subscriber.name);
std::cout << "Address: "; std::getline(std::cin, subscriber.address);
std::cout << "Phone number: "; std::getline(std::cin, subscriber.phone_number);
std::cout << std::endl;
}
int max_debt_subscriber = -1;
for (int i = 0; i < subscribers.size(); i++)
{
if (subscribers[i].phone_number.substr(0, 2) == "22")
{
if (subscribers[i].debt > subscribers[max_debt_subscriber].debt)
{
max_debt_subscriber = i;
}
}
}
if (max_debt_subscriber != -1)
{
std::cout << "Number: " << subscribers[max_debt_subscriber].number << std::endl;
std::cout << "Name: " << subscribers[max_debt_subscriber].name << std::endl;
std::cout << "Address: " << subscribers[max_debt_subscriber].address << std::endl;
std::cout << "Phone number: " << subscribers[max_debt_subscriber].phone_number << std::endl;
std::cout << "Debt: " << subscribers[max_debt_subscriber].debt << std::endl;
}
else
{
std::cout << "No subscribers found" << std::endl;
}
return 0;
}
std::shared_mutex
. #include <iostream>
#include <filesystem>
int main(int argc, char** argv)
{
std::cout << "Enter your login: " << std::endl;
std::string login;
std::getline(std::cin, login);
std::filesystem::create_directory("D:/Test/" + login);
return 0;
}
#include <Windows.h>
int main(int argc, char** argv)
{
MessageBox(0, TEXT("Some text"), TEXT("Some text"), MB_OK);
return 0;
}
std::atoi(some_string.c_str())
const char*
с std::string
. Так же в функцию, принимающую const char*
ты кладёшь строку из std. Тебе нужно вызвать c_str
у std::string
для получения C-style строкиint main(int argc, char** argv)
{
std::string test = "test.cpp";
std::string command = "cl /EHsc " + test;
system(command.c_str());
return 0;
}
class IDoter
{
public:
virtual void psyche() = 0;
};
class Newbie_doter : public IDoter
{
public:
void psyche() override
{
std::cout << "I've been played dota for only a week, I love the world!" << std::endl;
}
};
class Expert_doter : public IDoter
{
public:
void psyche() override
{
std::cout << "I'm a deadinside" << std::endl;
}
};
int main(int argc, char** argv)
{
IDoter* doter = new Newbie_doter;
doter->psyche();
delete doter;
doter = new Expert_doter;
doter->psyche();
delete doter;
return 0;
}
I've been played dota for only a week, I love the world!
I'm a deadinside
Map
в котором есть массив всех юнитов на карте. Попробуй заполнить массив специализациями, которые НЕ наследуются от абстрактного класса. Либо ты будешь писать десятки версий класса(при каждом добавлении новой специализации ты будешь писать десятки, сотни таких вариаций), либо сделаешь абстрактный класс Unit
от которого будут наследоваться специализации и при добавлении новой будет тебе останется написать пару строк кода.