Перейти к содержанию
СофтФорум - всё о компьютерах и не только

конструктор в с++


Рекомендуемые сообщения

Объясните, пож, почему если использовать конструктор с инициализироваными значения Complex(double r = 0.0, double i = 0.0); и при этом использовать конструктор по умолчанию Complex(), то появляется ошибка о неоднозначности (error: call of overloaded ‘Complex()’ is ambiguous; note: candidates are: Complex::Complex(double, double); note: Complex::Complex());

#include <iostream>class Complex{private:	double real;	double image;public:	Complex();	Complex(double r = 0.0, double i = 0.0);	~Complex();	Complex operator+(const Complex& cn);	Complex operator-(const Complex& cn);	Complex operator~();	Complex operator*(const Complex& cn);	friend Complex operator*(double factor, Complex& cn);	friend std::ostream& operator<<(std::ostream& os, const Complex& cn);	friend std::istream& operator>>(std::istream& is, Complex& cn);};Complex::Complex() //эта строка подчеркивается как ошибочная{real = 0.0;image = 0.0;}Complex::Complex(double r, double i)  //эта строка подчеркивается как ошибочная{real = r;image = i;}Complex::~Complex(){}Complex Complex::operator+(const Complex& cn){Complex result;  //эта строка подчеркивается как ошибочнаяresult.real = real + cn.real;result.image = image + cn.image;return result;}Complex Complex::operator-(const Complex& cn){Complex result;  //эта строка подчеркивается как ошибочнаяresult.real = real - cn.real;result.image = image - cn.image;return result;}Complex Complex::operator~(){Complex result;  //эта строка подчеркивается как ошибочнаяresult.image = -image;return result;}Complex Complex::operator*(const Complex& cn){Complex result;  //эта строка подчеркивается как ошибочнаяresult.real = real * cn.real - image * cn.image;result.image = real * cn.image + image * cn.real;return result;}Complex operator*(double factor, Complex& cn){Complex result;  //эта строка подчеркивается как ошибочнаяresult.real = factor * cn.real;result.image = factor * cn.image;return result;}std::ostream& operator<<(std::ostream& os, const Complex& cn){os << "(" << cn.real << ", " << cn.image << "i)";return os;}std::istream& operator>>(std::istream& is, Complex& cn){is >> cn.real >> cn.image;	return is;}using namespace std;int main(){Complex a(3.0, 4.0);Complex c;  //эта строка подчеркивается как ошибочнаяcout << "Enter complex number:\n";while (cin >> c){	cout << "c is " << c << endl;	cout << "complex merger " << ~c << endl;	cout << "a = " << a << endl;	cout << "a + c = " << a + c << endl; 	cout << "a - c = " << a - c << endl;	cout << "a * c = " << a * c << endl;	cout << "2 * c = " << 2 * c << endl;	cout << "Enter complex number:\n";}return 0;}
Ссылка на комментарий
Поделиться на другие сайты

Потому что строка

Complex result;

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

Выход: убрать из конструктора с параметрами значения по умолчанию. В них смысла нет. Если параметры не будут указаны, то стандартный конструктор и так приравняет части к 0.

Удачи.

Ссылка на комментарий
Поделиться на другие сайты

Потому что строка

Complex result;

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

Выход: убрать из конструктора с параметрами значения по умолчанию. В них смысла нет. Если параметры не будут указаны, то стандартный конструктор и так приравняет части к 0.

Удачи.

Возможно, а возможно и нет. Зависить из компилятора. Стандарт C++ не указиваеть как инициализировать переменние, которие програмист не инициализировал. Возможно там будеть произволний байт (то, что било в памяти до етого). Так что всегда указивайте стойности. А иначе в полне прав - смисля из параметров по умалчанию нет.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...