#include <memory>
std::unique_ptr<Audioformat> af(new Audioformat(""));
af->info(); af->title();
// Не нужен delete :D
class Audioformat {
public:
virtual string info() = 0;
};
class MP3_Format : public Audioformat {
public:
string info() override { return "MP3"; }
};
class Audioformat {
public:
virtual ~Audioformat() {}
};
function<double(double)>
-- это тип функции, которая принимает один параметр double и возвращает double.function<double(double)> f;
f = [](double x){ return x * 2; };
f(5); //=> 10
f = [](double x){ return x * x; };
f(5); //=> 25
eval(lambda_x3,2.0)
-- это то же самое, что и lambda_x3(2.0)
. const T&
T
T&
T*
/ const T*
. Константность зависит от того, надо ли параметр модифицироватьT&&
std::unique_ptr
std::unique_ptr
указывает на память, которой мы владеем. Предпочитать значению его следует, если это полиморфный типstd::array
, std::fstream
. Если мы хотим передавать владельца переменной такого типа или, например, вернуть из функции, то придётся использовать std::unique_ptr
.#include <vector>
#include <random>
std::vector<double> result(100);
std::uniform_real_distribution<double> unif(-10.0, 10.0);
std::default_random_engine re;
for (int i = 0; i < 100; ++i) {
result[i] = unif(re);
}
std::sort(result.begin(), result.end());
Zespolona operator+(const Zespolona& left, const Zespolona& right) { ... }
Zespolona operator-(const Zespolona& left, const Zespolona& right) { ... }
friend Zespolona operator+(const Zespolona& left, const Zespolona& right);
friend Zespolona operator-(const Zespolona& left, const Zespolona& right);