Я знаю, что мои конструкторы копий и перегруженные операторы в этом случае довольно произвольны, но я ищу кого-то, чтобы проверить, правильно ли я их делаю, а также правильно использовать *.Почему мой конструктор копирования вызывается, когда я возвращаю * это из функции члена класса?
Кроме того, может кто-нибудь сказать мне, почему конструктор копирования вызывается каждый раз, когда я возвращаю * это или объект типа Rectangle из любого из моих перегруженных операторов?
class Rectangle
{
private:
int length;
int width;
static int counter;
public:
Rectangle(int len = 0, int w = 0)
{
length = len;
width = w;
counter++;
}
~Rectangle()
{ counter--; }
static int getCounter()
{ return counter; }
Rectangle(const Rectangle &);
Rectangle operator+ (const Rectangle &);
Rectangle operator= (const Rectangle &);
};
int Rectangle::counter = 0;
Rectangle::Rectangle(const Rectangle &right) : Rectangle()
{
width = right.width;
length = right.length;
}
Rectangle Rectangle::operator+ (const Rectangle &right)
{
width += right.width;
length += right.length;
return *this;
}
Rectangle Rectangle::operator= (const Rectangle &right)
{
width = right.width;
length = right.length;
return *this;
}
': Rectangle()' неверно в определении конструктора. –
В любом случае я мог бы правильно увеличить счетчик? Если я использую конструктор копирования, чтобы сделать один объект равным другому, он не будет ссылаться на конструктор по умолчанию и, следовательно, не будет увеличивать счетчик. –
Увеличение счетчика в каждом определении конструктора. –