Complex(double _r): Complex(_r, 0){}
Complex(1,2) + 1;
1 + Complex(1,2)
#include <iostream>
using namespace std;
class Complex {
public:
Complex(double _r, double _i): r(_r), i(_i){}
Complex(double _r): Complex(_r, 0){}
friend Complex operator + (const Complex &left, const Complex &right);
private:
double r,i;
};
Complex operator + (const Complex &left, const Complex &right) { //Friend function
return Complex(left.r + right.r, left.i + right.i);
}
int main() {
Complex a = 4;
Complex b(1,2);
int c = 5;
a+b; // OK
3+b; // OK
a+123.0f; // OK
c+a; // OK
return 0;
}
ctime
, а не time.h
#include <random>
...
std::random_device rd;
std::cout << rd() % 10;
void fill_with_random(int* arr, size_t n)
{
random_device rand;
for (size_t i = 0; i < n; ++i)
{
arr[i] = rand() % 21 - 10;
}
}
cout << y[0][0]; //все прекрасно выводится
/*но если попробовать сделать y[0][0]+=1; то выводится ошибка "выражение должно быть допустимым для изменения левосторонним значением"*/
int operator [](int i)
{
return x[i];
}
int& operator [](int i)
{
return x[i];
}
int operator [](int i)
{
return y[i][0]; /*совершенно непонятно, какую роль здесь играет [0], и почему не работает с просто return y[i]... при изменении [0] на любое другое число, результат не меняется...*/
}
massiv& operator [](int i)
{
return y[i];
}
class Matrix
{
public:
Matrix() {}
int* operator[] (size_t i)
{
return &arr[i][0]; // Указатель на первый элемент i-ой строки.
}
private:
int arr[5][5];
}
bool Widget::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::FocusOut)
{
if (object == this)
{
qDebug() << "Здесь ловим событие focus Out!";
this->isActive = false;
this->update(); // из-за этой строчки я потерял 1,5 часа)
}
}
return false;
}
if (arr[0] == arr[1] == arr[2])
почему сравнение значений массива по индексу работает не так, как с обычными переменными
как мне добиться нужного результата?
player = new QMediaPlayer;
playlist = new QMediaPlaylist(player);
playlist->addMedia(QUrl("http://example.com/myfile1.mp3"));
playlist->addMedia(QUrl("http://example.com/myfile2.mp3"));
// ...
playlist->setCurrentIndex(1);
player->play();
String s3 = "Нас обманули, расходимся.";
означает вот что. Мы создаёт временную строку «Нас обманули, расходимся», а затем присваиваем её нашему s3. Конечно, компилятор это потом заоптимизирует, но это семантика языка, и ей надо следовать.String(const String &S)
.String(String &&S)
.class String
{
public:
String() {}
String& operator= (String& s) { return *this; }
};
String operator+ (String a, String b) { return String(); }
int main()
{
String s1;
String s2 = s1;
String s4;
s4 = s1 + s2;
}
String& operator= (const String& s)
. If T is a class type, and the type of other is different, or if T is non-class type, but the type of other is a class type, user-defined conversion sequences that can convert from the type of other to T (or to a type derived from T if T is a class type and a conversion function is available) are examined and the best one is selected through overload resolution. The result of the conversion, which is a prvalue temporary if a converting constructor was used, is then used to direct-initialize the object. The last step is usually optimized out and the result of the conversion is constructed directly in the memory allocated for the target object, but the appropriate constructor (move or copy) is required to be accessible even though it's not used.Грубо говоря сначала то, что справа неявно приводится к типу слева (при помощи конструктора) а потом используется для инициализации переменно с помощью move или copy-конструктора.