Qual é a diferença entre “::” “.” E “->” em c ++ [duplicado]

Duplicata Possível:
Quando uso um ponto, uma seta ou dois pontos duplos para se referir a membros de uma classe em C ++?

Eu criei a classe chamada Kwadrat e tenho três campos int dentro. O Code Blocks me dá conselhos que eu posso entrar no campo do objeto por::, . e->. A flecha é aquela que só funciona, mas por quê? Qual a diferença entre esses três?

#include <iostream>

using namespace std;

class Kwadrat{
public:
int val1, val2, val3;
    Kwadrat(int val1, int val2, int val3)
    {
        this->val1 = val1;
        //this.val2 = val2;
        //this::val3 = val3;
    }
};

int main()
{
    Kwadrat* kwadrat = new Kwadrat(1,2,3);
    cout<<kwadrat->val1<<endl;
    cout<<kwadrat->val2<<endl;
    cout<<kwadrat->val3<<endl;
    return 0;
}

questionAnswers(8)

yourAnswerToTheQuestion