C ++: retorno * esta función de miembro


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;
}

Los resultados operativos

nombre de la función este tipo * Este tipo Tipo de retorno
f1 Una const * UN UNA&
f2 Una const * UN UN

análisis:

  1. f1 del tipo de retorno es A &, x.f1 () devuelve una referencia a x, la acción de apropiado x.f1 cambia x.
  2. 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:

  1. Volver * esta función de miembro se puede combinar en una sola sentencia.
  2. 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;
}

Los resultados operativos

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:

  1. 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.
  2. 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:

  1. objeto constante, y el objeto de referencias y punteros constantes sólo puede llamar a métodos constantes.
  2. 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;
}

error del sistema

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:

  1. 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();
  1. 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();
  1. 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();
  1. 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:

  1. 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.
Publicado 77 artículos originales · ganado elogios 25 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_34801642/article/details/104559575
Recomendado
Clasificación