La clase de números complejos de C ++ implementa la sobrecarga de operadores

Tabla de contenido:

1. Acerca de la sobrecarga del operador

2. La forma de sobrecarga del operador: función de miembro y función de amigo

3. Operadores que solo pueden sobrecargarse con funciones miembro

4. Utilice clases de números complejos para implementar la sobrecarga de operadores


1. Acerca de la sobrecarga del operador

La sobrecarga de operadores es redefinir los operadores existentes y darles otra función para realizar diferentes tipos de datos. La esencia es la sobrecarga de funciones. El uso de la sobrecarga del operador puede hacer que el programa sea más claro. Operador de palabra clave para la sobrecarga de operadores. La mayoría de los operadores en C ++ se pueden sobrecargar y los operadores que no se pueden sobrecargar son . ::. *?: Sizeof.

2. La forma de sobrecarga del operador: función de miembro y función de amigo

Función amigo:

(1) ¿Qué es una función de amigo?

C ++ proporciona un mecanismo amigo que permite que una clase otorgue acceso a sus miembros no públicos a una función o clase específica. En términos sencillos, las funciones de amigos (o clases de amigos) son como paparazzi, y otras funciones o clases son como estrellas. Los paparazzi pueden conocer fácilmente los asuntos privados de la celebridad sin el permiso de la celebridad.

Función de amigo: si la función se declara con la palabra clave de amigo después de que se define la función, la función es una función de amigo. Las funciones de amigo pueden acceder a miembros privados en esta clase. Además, una función de amigo también puede ser una función miembro de otra clase, denominada función miembro de amigo .

Clase de amigo: al definir una clase, también puede usar amigo para declararla como clase de amigo. Dos puntos de explicación: 1. La relación de amigos es unidireccional, es decir, si B es una clase de amigos de A, no significa que A es una clase de amigos de B, y las funciones miembro de la clase A no pueden acceder datos de la clase B. 2. La relación de amigos no se puede transmitir ni heredar.

(2) Por qué utilizar funciones de amigos

Los principios básicos de la programación orientada a objetos son la encapsulación y el ocultamiento de información, pero los amigos pueden acceder a miembros privados en otras clases a voluntad, rompiendo el principio de encapsulación. El uso de amigos ayuda a compartir información y mejora la eficiencia del programa. Al usarlo, debe elegir un equilibrio adecuado entre compartir datos y ocultar información.

3. Operadores que solo pueden sobrecargarse con funciones miembro

Operator =, [], (), -> solo se puede sobrecargar a través de funciones miembro

Razón: no conozco el elogio. . .

4. Utilice clases de números complejos para implementar la sobrecarga de operadores

(1) Utilice la función de amigo para lograr:

#include<iostream>
using namespace std;

class complex//定义虚数类,用成员函数实现符号重载
{
public:
	complex(double r = 0, double i = 0);
	friend complex operator +(const complex &c1,const complex &c2);
	friend complex operator -(const complex &c1,const complex &c2);
	friend complex operator -(const complex &c);
	void print() const
	{
		cout << real << "+" << imag << "i" << endl;
	}

private:
	double real;
	double imag;
};

complex::complex(double r, double i)//构造函数
{
	real = r;
	imag = i;
}

complex operator+(const complex &c1,const complex &c2)
{
	complex c;
	c.real = c1.real + c2.real;
	c.imag = c1.imag + c2.imag;
	return c;
}

complex operator-(const complex &c1,const complex &c2)
{
	complex c;
	c.real = c1.real - c2.real;
	c.imag = c1.imag - c2.imag;
	return c;
}

complex operator-(const complex &c)
{
	return complex(-c.real, -c.imag);
}

int main()//定义主函数测试
{
	complex c1(3, 5), c2(2, 7), c3;
	c3 = c1 + c2;
	c3.print();
	c3 = c1 - c2;
	c3.print();
	c3 = -c1;
	c3.print();
}

 (2) Utilice funciones miembro para lograr:

#include<iostream>
using namespace std;

class complex//定义虚数类,用成员函数实现符号重载
{
public:
	complex(double r = 0, double i = 0);
	complex operator +(const complex &c2);
	complex operator -(const complex &c2);
	complex operator -();
	void print()
	{
		cout << real << "+" << imag << "i" << endl;
	}

private:
	double real;
	double imag;
};

complex::complex(double r, double i)//构造函数
{
	real = r;
	imag = i;
}

complex complex::operator+(const complex &c2)
{
	complex c;
	c.real = real + c2.real;
	c.imag = imag + c2.imag;
	return c;
}

complex complex::operator-(const complex& c2)
{
	complex c;
	c.real = real - c2.real;
	c.imag = imag - c2.imag;
	return c;
}

complex complex::operator-()
{
	return complex(-real, -imag);
}

int main()//定义主函数测试
{
	complex c1(3, 5), c2(2, 7), c3;
	c3 = c1 + c2;
	c3.print();
	c3 = c1 - c2;
	c3.print();
	c3 = -c1;
	c3.print();
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44961794/article/details/94502521
Recomendado
Clasificación