Primero lo primero; es decir:
Cita: 2)Como puedo ver la definición de la clase string , es decir el archivo . h donde esta definida
Ya amchacon te señaló la referencia obligada a la clase string, pero como toda referencia, a diferencia del lenguaje coloquial, cada palabra dentro de su frase tiene un significado específico que hay que entender antes de pasar a la palabra siguiente, lo que exprime la pobre neurona más de lo normal.
Por ejemplo, el tercer párrafo dice:
Cita: The string class is an instantiation of the basic_string class template that uses char (i.e., bytes) as its character type, with its default char_traits and allocator types (see basic_string for more info on the template).
Lo que traducido y rebajado con tres litros de agua, viene a ser:
una std::string es una instanciación (plasmación) de la clase template
basic_string especializada para
chars.
En consecuencia, el archivo cabecera que estás buscando está incluído en <string> y es el
basic_string.h, que normalmente se encuentra en el directorio
include de tu compilador.
Puedes ver un ejemplo de un basic_string.h (de la GNU ISO C++ Library) en
http://www.aoc.nrao.edu/php/tjuerges...8h-source.html
Con respecto al segundo punto, o sea:
Cita: 1) Implemente una clase en C++ que extienda de la clase estándar std::string ...
lamentablemente es una muy mala idea.
Hay diferentes razones, y estoy seguro que no me acuerdo de las más importantes, pero una de ellas, la que para mí ya es suficiente para huir de la idea, es que el destructor de la clase template basic_string no es virtual (fíjate en su declaración).
Esto no necesariamente quiere decir que sea imposible derivar una clase de basic_string, pero sí que va a complicarse, demasiado para mi gusto; en particular porque no va a ser posible invocar al destructor de la clase string derivada.
Por ejemplo:
Código:
class my_string: public std::string{};
std::string* str = new my_string;
delete str; // ¡ay!, no se va a invocar al destructor
// de la clase derivada my_string
¿Y entonces?
Entonces nada, joderse tío. ¿qué tiene de malo hacer una función
Código:
void elimina_el_primero_que_encuentra(std::string& str, char ch);
que recorra la string
str que recibe por parámetro y elimine la primera ocurrencia del char
ch que encuentre?