оператор не возвращает полный объект?

#c

#c

Вопрос:

Нам предоставляется этот заголовочный файл, который требует от нас перегрузки операторов = и , чтобы мы могли выполнить i3 = i1 i2 .

По какой-то причине мой operator не возвращает полный объект… Он возвращает строки просто отлично, но целые числа возвращают -858993460. Что странно, учитывая, что я присвоил им значение.

Вот мой оператор:

 Image Image::operator (Image constamp; image)
{
    return image;
}
  

В моем = операторе, которому передается значение, он неправильно отображает int s:

 const Imageamp; Image::operator=(Image constamp; image)
{
    cout << image.filename << endl; // Displays correctly
    cout << "image x: " << image.size_x << ": " << image.get_size_x() << endl; // Displays incorrectly (-int)
  

Здесь я работал над новым объектом, но он не работал, поэтому я просто передал объект, которому, как я знал, были присвоены значения, и он по-прежнему сталкивается с проблемой uninit int. Независимо от того, какой объект я передаю, я сталкиваюсь с теми же проблемами. Строки в порядке, но целые числа, похоже, передаются неправильно

Комментарии:

1. Покажите ваш конструктор копирования, который используется вашей return инструкцией.

2. Проблема почти наверняка в вашем конструкторе копирования

3. Спасибо, что заявили, что это домашнее задание. Я думаю, что больше людей помогут

4. Любопытно, что произойдет, если вы вообще не будете задействовать свой метод operator (), сбрасывая значение непосредственно с кодом? Изолируйте, действительно ли это оператор, класс или если вам нужно сделать что-то особенное с cout из-за типа элемента.

5. Немного больше корректности в const не повредит, но, скорее всего, ваш конструктор копирования неверно сформирован. Обратите внимание, что в вашем операторе присваивания нет присваивания, которое я вижу, либо только некоторые cout инструкции.

Ответ №1:

Так получилось, что это БЫЛ мой конструктор копирования. Сейчас я чувствую себя очень глупо.

Все, что мне нужно было сделать, это присвоить значение по умолчанию в моем операторе, который принимал изображение в качестве параметра.

ie:

 Image::Image( Image amp; const img )
{
     this->size_x = img.get_size_x();
}
  

Комментарии:

1. Обратите внимание, что вы также можете использовать нечто, называемое ctor-initializer вот так: Image::Image(Image amp; const img) : size_x(img.get_size_x()) {} для инициализации size_x элемента.

2. хотя еще лучшим вариантом было бы просто позволить компилятору создать конструктор копирования по умолчанию. Конструктор копирования, который копирует целое число, довольно бесполезен.

3. верно, в нашей домашней работе нам приходилось выполнять другие операции, кроме этой, но это было причиной моих проблем.