La práctica de la sobrecarga de operadores

Para el tipo incorporado, el compilador sabe cómo calcular, si se quiere definir una clase por
clase de persona, los datos privados puntaje construido, y cómo el constructor C Persona
= A + B; (donde a, b son el objeto);

#include<iostream>
using namespace std;
class Person
{
public:
	Person() { score = 5; }
private:
	int score;
};

Para los tipos predefinidos, el compilador sabe cómo calcular, si quieres por clase define una
necesidad de + sobrecargado, se puede definir a una persona y más (y persona p)
cambiado para alcanzar el objeto de valor es claramente no a + b es directamente más conveniente . Necesidad a través de
la utilización de operador + manera op proporcionado por el compilador para operadores sobrecargados para lograr el propósito,
puede ser en la forma de la función y persona de operador + (y persona de una ) de la definición de una clase que implementa
un único parámetro pasó también puede operador persona + (Person & a, y persona b )
medios para alcanzar una pluralidad de parámetros de transmisión, los códigos específicos son los siguientes:

#include<iostream>
using namespace std;
class Person
{
friend Person operator+(Person& a, Person& b);//访问私有数据
public:
	Person() { score = 5; }
private:
	int score;
};
Person operator+(Person& a, Person& b)//实现相加重载
{
	Person temp;
	temp.score = a.score + b.score;
	return temp;
}
int main()
{
    Person a,b;
    a=a+b;
    return 0;
}

Puede operación de a + b dirigir, la adición se puede prever con otros operadores tales como la sobrecarga de
datos de la puntuación directa de salida de un operador de desplazamiento a la izquierda, donde los datos son privados porque entonces la principal
función cout directamente de salida, obviamente, quieren usar improbables por la sobrecarga de operadores desplazamiento a la izquierda
se puede lograr este contenido para lograr un tribunal <<; formas no suelen utilizar la letra por los miembros
para implementar las funciones como funciones miembro de la función no puede reúnen tribunal << una serie de formularios para que cout
en el lado izquierdo, y por lo tanto puede ser realizado por la definición del contenido de la función global.

#include<iostream>
using namespace std;
class Person
{
friend Person operator+(Person& a, Person& b);//访问私有数据
friend ostream& operator<<(ostream& cout, Person& p);//仅实现左移运算符号重载;
public:
	Person() { score = 5; }
private:
	int score;
};
ostream& operator<<(ostream& cout, Person& p)//实现左移重载
{
	cout << p.score;
	return cout;
}
int main()
{
    Person a;
    cout << a;
}

elementos directos automultiplicadoras se consigue definiendo un frente ++.

class Person
{
friend Person operator+(Person& a, Person& b);//访问私有数据
friend ostream& operator<<(ostream& cout, Person& p);//仅实现左移运算符号重载;
friend Person& operator++(Person& a);//实现前置++重载;
public:
	Person() { score = 5; }
private:
	int score;
};
ostream& operator<<(ostream& cout, Person& p)//实现左移重载
{
	cout << p.score;
	return cout;
}
Person& operator++(Person& a)//实现前置递增重载;
{
	a.score++;
	return a;
}
int main()
{
    Person a;
    a++;
    cout <<a;
}

由于后置++时必须返回临时对象,重载左移运算符中第二个参数也
必须时使用值而非引用值,如果保持引用作为函数参数会使得cout
<<a++;尽管在第一次运行流畅这是由于编译器的优化,第二次实现
时就会崩溃这是用于编译器已经将这部分内存释放了是一个临时变
量拷贝给源对象使得源对象在执行内容后被释放内存;

#include<iostream>
using namespace std;
class Person
{
	friend void test(Person p);
	friend ostream& operator<<(ostream& cout, Person& p);//仅实现左移运算符号重载;
	friend Person operator+(Person& a, Person& b);
	friend Person& operator++(Person& a);//实现前置++重载;
public:
	Person() { score = 5; }
	Person operator++(int)
	{
		Person temp = *this;
		score++;
		return temp;
	}//实现后置++重载
private:
	int score;
};
void test(Person p)
{
	cout << p.score;
}
int main()
{
    Person a;
    a++;
    test(a);  
    return 0;  
}

本文内容粗糙,可以学习b站上黑马程序员相关这部分内容。

Supongo que te gusta

Origin www.cnblogs.com/pekkasuper/p/12590108.html
Recomendado
Clasificación