У меня проблемы с тем, что я считаю перегрузкой оператора вставки моей программы. Это задание для начинающего класса С ++, в котором я должен использовать функции-потомки для выполнения задач с комплексными числами и векторами.
Когда я ввожу число для любого класса, оно либо неправильно читается, либо присваивается массиву правильно. Я пытаюсь разобраться с этим уже более часа, и ничего, что я пытаюсь, похоже, не работает.
Классы:
class pairs
{
protected:
double a;
double b;
public:
pairs(): a(0), b(0){}
pairs(const pairs&p): a(p.a), b(p.b){}
pairs(double x, double y): a(x), b(y){}
pairs operator +(pairs& second){
return pairs(a+second.a, b+second.b);
}
pairs operator -(pairs& second){
return pairs(a-second.a, b-second.b);
}
bool operator ==(pairs& second){
bool tf=false;
if (a==second.a && b==second.b)
tf=true;
return tf;
}
};
class comp:public pairs
{
public:
comp():pairs(){}
comp(const pairs&p):pairs(p){}
comp(double x, double y):pairs(x, y){}
comp operator *(comp& second){
comp mew;
mew.a=(a*second.a)-(b*second.b);
mew.b=(a*second.b)+(b*second.a);
return mew;
}
comp operator /(comp& second);
friend ostream& operator << (ostream& fout, comp& num){
if(num.b<0)
cout<<num.a<<num.b<<"i";
else
cout<<num.a<<"+"<<num.b<<"i";
return fout;
}
friend istream& operator >> (istream& fin, comp num){
char sym, i;
cout<<"Enter a complex number in a+bi or a-bi form: ";
cin>>num.a>>sym>>num.b>>i;
if(sym=='-')
num.b*=-1;
return fin;
}
};
class vect:public pairs
{
public:
vect():pairs(){}
vect(const pairs&p):pairs(p){}
vect(double x, double y):pairs(x, y){}
vect operator*(double num){
return vect(a*num, b*num);
}
int operator*(vect num){
int j;
j=(a*num.a)+(b*num.b);
return j;
}
friend ostream& operator << (ostream& fout, vect& num){
cout<<"<"<<num.a<<","<<num.b<<">";
return fout;
}
friend istream& operator >> (istream& fin, vect num){
char beak, com;
cout<<"Enter vector in <a,b> form: ";
cin>>beak>>num.a>>com>>num.b>>beak;
return fin;
}
};
Вызов операторов вставки выглядит следующим образом:
comp temp;
int store;
cin>>temp;
cout<<"Where do you want to store this (enter 1-6): ";
cin>>store;
while(store<1 || store>6)
{
cout<<"Invalid location. re-enter: ";
cin>>store;
}
six[store-1]=temp;
break;
То же самое для vect, если вы измените «comp temp» на «vect temp»
Массив comp или vect размера 6 передается в функцию, поэтому six [] не отображается как объявленный.
Я попытался запустить программу и печатать temp до того, как она была назначена массиву, и оба значения были по-прежнему на нуле, и я не знаю, почему это может быть.
Любые советы высоко ценится. :]
Вы должны использовать std::istream&
в operator>>()
реализация для чтения из:
friend istream& operator >> (istream& fin, vect num){
char beak, com;
// cout<<"Enter vector in <a,b> form: ";
fin >> beak >> num.a >> com >>num.b >> beak;
// ^^^
return fin;
}
То же самое для другого operator>>()
Перегрузки.
Также вы хотите вывести подсказку вне использования перегруженной функции ввода (поэтому я прокомментировал ее выше).