Una a una...
1.- virtual int nombre() = 0;
En la declaración de una clase P, significa vairas cosas:
a) Los objetos de "esa clase" tienen una función nombre, que devuelve un entero.
b) Por el 'virtual', la implementación de esa clase puede ser sobreescrita por las clases hijas (digamos class H), es decir, pueden dar otra implementación distinta para la función. Después si tienes:
P *obj = new H();
obj->nombre();
se llama a la función nombre definida en la clase H, no en la clase P, a pesar de que obj es un puntero a P.
c) Por el '=0', la clase P NO IMPLEMENTA la función nombre, por lo que las clases hijas DEBEN implementarla. La clase P es lo que se llama clase abstracta, debido a que no implementa todas las funciones, así que no se pueden crear objetos de esa clase (esto, repito, es debido al '=0'; si no se pone, la clase P tendrá el código de nombre).
/-----/
2.- Operator sirve para sobrecargar operadores. El ejemplo tipico es tener una clase que representa los números complejos (aquello de a + b·i, donde i es la raiz de menos uno). Lo normal es tener algo como:
class Complejo {
public:
float a, b;
....
}
Y luego un montón de métodos distintos, para hacer operaciones con complejos, etc.
La cosa es que claro, si luego tu tienes dos complejos c1 y c2, lo que molaría sería poder poner algo como:
suma = c1 + c2;
en vez de
suma = c1.suma(c2);
y para eso vale el operator :)
[... en la clase complejo ... ]
Complejo operator+(Complejo op2) {
Complejo ret;
ret.a = a + op2.a; ret.b = b + op2.b;
return ret;
}
/------------/
3.- El const al final de un método de una clase significa que la función no cambia los atributos de ese objeto. Por ejemplo:
class Persona {
private:
int edad;
public:
int dameEdad() const {return edad;}
}
Es una buena costumbre poner el const en las funciones, porque a veces te verás en la necesidad de hacer una función como:
void escribeEdad(const Persona &persona) {
cout << persona.dameEdad();
}
Si la funcion dameEdad no la tienes declarada como const, no podrás hacerlo, porque el parámetro 'persona' de la funcion es constante (no puede cambiarse dentro de la función), y el compilador no sabe que dameEdad no lo cambia.
Así que, no hagas lo que yo, y si sobrecargas el operador suma de los complejos como he hecho antes, declara la función const, porque el this no lo cambia ;)
Un saludo.
P.D.: No sé si he ido demasiado despacio/deprisa en la explicación... pero eran tres preguntas que pueden dar para mucho si las quieres con detalle, o para poco si lo quieres saber por curiosidad...