使用类添加复数
Addition of complex numbers using classes
我正在尝试将2个复数添加在一起,但是我会遇到错误:
无操作员" "匹配这些操作数
无操作员"<<"匹配这些操作数
#include <iostream>
using namespace std;
class complex
{
public:
double get_r() { return r; }
void set_r(double newr) { r=newr; }
double set_i() { return i; }
void set_i(double newi) { i = newi; }
private:
double r, i;
};
int main()
{
complex A, B;
A.set_r(1.0);
A.set_i(2.0);
B.set_r(3.0);
B.set_i(2.0);
complex sum = A+B;
cout << "summen er: " << sum << endl;
system("PAUSE");
return 0;
};
我是编程的新手,但是我看不出为什么它不会将这些数字添加在一起。我做错了什么?
您必须超载运算符 and&lt;&lt;(以及您需要的每一个)适用于您定义的类。请注意,运算符仅比具有特定定义语法的特定函数(例如:C = a b可以理解为c = a.sum(b))。在这里,有关http://en.cppreference.com/w/cpp/language/operators
运算符 定义为内置类型和标准库中的某些类型。由于complex
在这里是自定义类,因此您必须定义所有应该对其作用的操作员。
operator +
可以定义为:
class complex {
...
complex operator + (const complex& other) {
return complex(get_r() + other.get_r(), get_i() + other.get_i());
}
...
};
提防既不允许A++
也不允许A-B
的软件。他们需要(分别)complex & operator ++()
或complex operator - (const complex &)
。
对于流插入,第一个参数是流本身,因此您必须定义一个在类外部使用2个参数的朋友操作员:
outstream& opererator << (outstream &out, const complex& val) {
// output it the way you want
return out;
}
复数是C 标准的一部分。这是http://en.cppreference.com/w/cpp/numeric/complex。
的示例#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
int main()
{
using namespace std::complex_literals;
std::cout << std::fixed << std::setprecision(1);
std::complex<double> z1 = 1i * 1i;
std::cout << "i * i = " << z1 << 'n';
std::complex<double> z2 = std::pow(1i, 2);
std::cout << "pow(i, 2) = " << z2 << 'n';
double PI = std::acos(-1);
std::complex<double> z3 = std::exp(1i * PI);
std::cout << "exp(i * pi) = " << z3 << 'n';
std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i;
std::cout << "(1+2i)*(1-2i) = " << z4*z5 << 'n';
}
尝试自己实现班级复合物将需要您定义加法,平等和Ostream。而且您只有5%的完全实现的班级。查看标题本身将揭示那些编写C 标准库的人如何实现整个过程。
所有算术运算符,例如plus,减,乘法或仅与预定的数据类型一起工作,例如int,char,float等。
现在,如果您想在课堂中添加一些内容,则必须使用OO编程的基本方面,即操作员超载。
这是您可以实现它的方式。
#include <iostream>
using namespace std;
class complex
{
float x, y;
public:
complex()
{
}
complex(float real, float img)
{
x = real;
y = img;
}
friend complex operator+(complex,complex);
void display(void);
};
complex operator+(complex c,complex d)
{
complex t;
t.x = d.x + c.x;
t.y = d.y + t.y;
return(t);
};
void complex::display(void)
{
cout << x << "+i" << y << endl;
}
int main()
{
complex c1, c2, c3;
c1 = complex(2.5, 3.5);
c2 = complex(1.5, 5.5);
c3 = c1 + c2;//c3=opra+(c1,c2)
cout << "C1:" << endl;
c1.display();
cout << "C2:" << endl;
c2.display();
cout << "C3:" << endl;
c3.display();
}
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题