1. La función devuelve una referencia al tipo
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
int a = 0; //数据成员
// 返回引用
A &f1() { return *this; }
// 返回非引用
A f2() { return *this; }
// a+=1
void combine() { a += 1; }
};
int main()
{
A x, y;
x.f1().combine();
//等价于
// A &temp1 = x.f1();
// temp1.combine();
y.f2().combine();
//等价于
// A temp2 = y.f2();
// temp2.combine();
cout << "x.a = " << x.a << endl;
cout << "y.a = " << y.a << endl;
return 0;
}
nombre de la función | este tipo | * Este tipo | Tipo de retorno |
---|---|---|---|
f1 | Una const * | UN | UNA& |
f2 | Una const * | UN | UN |
análisis:
- f1 del tipo de retorno es A &, x.f1 () devuelve una referencia a x, la acción de apropiado x.f1 cambia x.
- f2 del tipo de retorno es A, y.f2 () devuelve una copia de y, la operación de y.f2 () no afecta a la y.
resumen:
- Volver * esta función de miembro se puede combinar en una sola sentencia.
- Para el regreso * esta función de miembro, si se trata de un tipo de retorno de referencia, el valor de retorno es una referencia a la clase de objeto; si no es un tipo de retorno de referencia, el valor de retorno es una copia de la clase de objeto.
2. métodos constantes
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
int a = 0; //数据成员
// 非常量成员函数
A &f1() { return *this; }
// 常量成员函数
const A &f2() const { return *this; }
};
int main()
{
A x1; //非常量
x1.f1();
x1.f2();
const A x2; // 常量
x2.f1(); //错误
x2.f2();
return 0;
}
nombre de la función | este tipo | * Este tipo | Tipo de retorno |
---|---|---|---|
f1 | Una const * | UN | UNA& |
f2 | Un const * const | Una const | const A & |
análisis:
- x1 es una variable, f2 es una constante funciones miembro. Cuando se invoca f2 x1, este = & x1, este punto const A, x1 es A, el objeto puede punto a punto constante es la cantidad de los respectivos objetos, x1.f2 () correctamente.
- x2 es constante, f1 no es un funciones miembro constante. Cuando se invoca x2 f1, este = & x2, este punto A, X2 es un const, tipo de falta de coincidencia, x2.f1 error ().
resumen:
- objeto constante, y el objeto de referencias y punteros constantes sólo puede llamar a métodos constantes.
- objeto Const puede llamar a métodos constantes y funciones miembro no const. El compilador para llamar a métodos constantes en caso de sobrecarga.
secuencia de llamada de función 3. miembro const
#include <iostream>
using namespace std;
class A
{
public:
int a = 0; //数据成员
A &add()
{
a += 1;
return *this;
}
const A &show() const
{
cout << a << endl;
return *this;
}
};
int main()
{
// 先a+1, 再打印a
A a1;
a1.add(); //this=&a1, this指向A, a1是A
a1.show(); //this=&a1, this指向const A, a1是A
A a2;
a2.add().show();// a2.add()的结果不是常量,可以调用常量成员函数
// 先打印a, 再a+1
A a3;
a3.show(); //this=&a3, this指向const A, a3是A
a3.add(); //this=&a3, this指向A, a3是A
A a4;
a4.show().add(); // 错误,a4.show()的结果是常量。常量对象只能调用常量成员函数,add不是常量成员函数
return 0;
}
nombre de la función | este tipo | * Este tipo | Tipo de retorno |
---|---|---|---|
añadir | Una const * | UN | UNA & |
show | Un const * const | Una const | const A & |
análisis:
- a1 sí mismo no es constante, puede llamar a una las funciones miembro ordinarias añaden funciones miembro y las constantes muestran. a1.add () devuelve una referencia a la unión de a1, esta referencia) no tuvo efecto sobre a1.show (.
A a1;
a1.add(); //this=&a1, this指向A, a1是A
a1.show(); //this=&a1, this指向const A, a1是A
//等价于
A &tem1 = a1.add();
a1.show();
- a2 sí mismo no es constante, puede llamar a una función miembro complemento ordinaria. a2.add () devuelve una referencia a la unión de a2, la referencia no es una referencia a la constante, se puede llamar a funciones miembro const muestran.
A a2;
a2.add().show();
//等价于
A &temp2 = a2.add();
temp2.show();
- a3 sí mismo no es constante, puede llamar a métodos constantes y muestran funciones miembro ordinarias añaden. a3.show () devuelve una referencia a la unión de a3, esta referencia no tiene efecto en a3.add ().
A a3;
a3.show(); //this=&a3, this指向const A, a3是A
a3.add(); //this=&a3, this指向A, a3是A
//等价于
const A &temp3 = a3.show();
a3.add();
- a4 sí mismo no es constante, puede llamar a métodos constantes muestran. a4.show () devuelve una referencia a la unión de a4, la referencia es una referencia a la constante, sólo puede llamar a métodos constantes, no puede ser llamada ordinaria función miembro complemento.
A a4;
a4.show().add(); // 错误
//等价于
const A &temp4 = a4.show();
temp4.add();
resumen:
- función miembro común combina con la función de la constante atención de los miembros cuando una instrucción es el orden de sus significados pueden diferir desmontado después de su fusión y tales son el mismo significado que a1 y a2, a3 y a4 significados diferentes.