加减乘除符号重载(友元)
# include <iostream>
using namespace std;
class num {
private:
double real;
double imag;
public:
num();
void set();
void display();
//乘号重载
friend num operator *(const num& a, const num& b);
friend num operator +(const num& a, const num& b);
friend num operator -(const num& a, const num& b);
friend num operator /(const num& a, const num& b);
};
num::num() {
real = 0;
imag = 0;
}
void num::set() {
cin >> real >> imag;
}
void num::display() {
cout << real << "+" << imag << 'i' << endl;
}
num operator*(const num& a, const num& b) {
num num1;
num1.real = (b.real * a.real) - (b.imag * a.imag);
num1.imag = (b.imag * a.real) + (b.real * a.imag);
return num1;
}
num operator+(const num& a, const num& b) {
num num1;
num1.real = a.real + b.real;
num1.imag = a.imag + b.imag;
return num1;
}
num operator-(const num& a, const num& b) {
num num1;
num1.real = a.real - b.real;
num1.imag = a.imag - b.imag;
return num1;
}
num operator/(const num& a, const num& b) {
num num1,temp;
temp.real = b.real;
temp.imag = -b.imag;
num1 = temp * a;
double x = (a.real * a.real) + (b.real * b.real);
num1.real = num1.real / x;
return num1;
}
int main() {
num a1, a2;
a1.set();
a2.set();
num a3 = a1 * a2;//等价于:a3 = operator*(a1,a2)
num a4 = a1 + a2;
num a5 = a1 - a2;
num a6 = a1 / a2;
a3.display();
a4.display();
a5.display();
a6.display();
}
使用普通函数进行加号的重载
# include <iostream>
using namespace std;
class num {
private:
public :
double real;
double f;
num();
void display();
void set();
};
num operator +(const num&a,const num&b) {
num z;
z.real = a.real + b.real;
z.f = a.f + b.f;
return z;
}
num::num() {
real = 0;
f = 0;
}
void num::set() {
cin >> real >> f;
}
void num::display() {
cout << real << '+' << f << "i" <<endl;
}
int main() {
num a1, a2;
a1.set();
a2.set();
num a3 = a1 + a2;
a3.display();
}
使的 i+c1 c1+i 以及c1+c2 合法:
# include <iostream>
using namespace std;
class complex {
private:
double real;
double imag;
public :
complex();
void set();
void display();
complex operator+ (const complex & x);//复数之间的现加
complex operator+(int a);//(整数在后)
friend complex operator+(int a, const complex& z);//整数和复数相加(整数在前 )
};
complex::complex() {
real = 0;
imag = 0;
}
void complex::set() {
cin >> real >> imag;
}
void complex::display() {
cout << '(' << real << '+' << imag << 'i' << ')' << endl;
}
complex complex::operator+(const complex& a) {
complex z;
z.real = real + a.real;
z.imag = imag + a.imag;
cout << z.real << '!' << endl;
cout << z.imag << "!!" << endl;
cout << "two" << endl;
return z;
}
complex complex::operator+(int a) {
complex z;
z.real = real + a;
z.imag = imag;
cout << "hou" << endl;
return z;
}
complex operator+(int x,const complex& a) {
complex z;
z.real = x + a.real;
z.imag = a.imag;
cout << "qian" << endl;
return z;
}
int main() {
complex num, num1;
num.set();
num1 = 3 + num;//报错,此处不可以用引用作为函数的参数只能用正常的int类型
num1.display();
num1 = num + 3;//此处如上一致,都不可以让变量的引用作为参数。
num1.display();
complex num2;
num2.set();
num1 = num2 + num;
num1.display();
}
重载加号,使得其表达的意思为两个矩阵相加:
# include <iostream>
using namespace std;
class co {
private:
int num[4][3];
public:
co();
void set();
void display();
co operator+(const co &x);
};
co::co() {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
num[i][j] = 0;
}
}
}
void co::set() {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
cin >> num[i][j];
}
}
}
void co::display() {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
if (j == 0) {
cout << num[i][j];
}
else
cout <<' '<< num[i][j];
}
cout << endl;
}
}
co co::operator+(const co& z) {
co z1;
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
z1.num[i][j] = num[i][j] + z.num[i][j];
}
}
return z1;
}
int main() {
co num1, num2;
num1.set();
num2.set();
co num3;
num3 = num1 + num2;
num3.display();
return 0;
}
在上一个代码的基础上,重载<<以及>>运算符,进行两个矩阵的相加
# include <iostream>
using namespace std;
class co {
private:
int num[4][3];
public:
co();
void set();
void display();
co operator+(const co &x);
//输入
friend istream& operator >>(istream&,co&);
//输出
friend ostream & operator << (ostream&,co&);//两种编译方式都可通过
};
istream& operator>>(istream& input, co& z) {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
input >> z.num[i][j];
}
}
return input;
}
ostream& operator<<(ostream& output, co& z) {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
if (j == 0) {
output << z.num[i][j];
}
else
output << ' ' << z.num[i][j];
}
output << endl;
}
return output;
}
co::co() {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
num[i][j] = 0;
}
}
}
void co::set() {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
cin >> num[i][j];
}
}
}
void co::display() {
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
if (j == 0) {
cout << num[i][j];
}
else
cout <<' '<< num[i][j];
}
cout << endl;
}
}
co co::operator+(const co& z) {
co z1;
for (int i = 0;i < 2;i++) {
for (int j = 0;j < 3;j++) {
z1.num[i][j] = num[i][j] + z.num[i][j];
}
}
return z1;
}
int main() {
co num1, num2;
//num1.set();
//num2.set();
cin >> num1 >> num2;
co num3;
num3 = num1 + num2;
//num3.display();
cout << num3;
return 0;
}
题目:
处理一个复数和一个double数据相加的运算,结果存放到double类型变量d中,输出d,再以复数形式输出此值。
# include <iostream>
using namespace std;
class complex {
private:
double real;
double f = 0;
public:
complex(double r, double i) {
real = r;
f = i;
}
//对象转换为double类型
operator double() {
return real;
}
complex(double z) {
real = z;
f = 0;
}
void display() {
cout << real << '+' << f << 'i' << endl;
}
};
int main() {
complex x1(2, 1);
double d = x1 + 2.3;
cout << d << endl;
complex(d).display();
}