"Bjarke Walling Petersen" <bwp@bwp.dk> wrote in message
news:3bdc3c8a$0$25384$edfadb0f@dspool01.news.tele.dk...
> Mogens Hansen skrev:
> > Det er et faresignal, hvis man lærer om char-arrays før man lærer om
> > "std::string".
>
> Det har du nok ret i... jeg prøver lige at skrive til min lærer
> Foresten: Hvad er std og hvad betyder dobbeltkolon? - er std en slags
class
> eller hvad?
Det er scope resolution operator.
Klassen "string" findes i "namespace std", derfor er dens fulde navn
"std::string". "std::string" er entydigt den streng klasse, der er beskrevet
i C++ Standarden, og som findes i ethvert anstændig C++ Standard Library
(som igen følger med de fleste anstændige C++ compilere).
Der kan potentiel eksistere andre "string" klasser, f.eks. "my_lib::string".
> Man behøver jo ikke at skrive std:: ...
>
Nej, man kan også først skrive
using std::string;
eller
using namespace std;
(eller den kan findes med Koenig lookup)
eller nogen kan have skrevet en "string" klasse som ligger globalt
namespace.
Men bortset fra disse tilfælde, skal man skrive std::string
> > Det er et faresignal, hvis man lærer at skrive <iostream.h> i stedet for
> > <iostream>.
>
> Jeg kan nu ikke se den store forskel...
Forskellen er pre-standard C++ og Standard C++.
C++ blev standardiseret i september 1998, men har været brugt de sidste ca.
20 år i stigende grad.
Man gør sig selv en tjeneste, hvis man lærer Standard C++. Det er
naturligvis udemærket at kende historien.
Der skete en del væsentlige ændringer med I/O klasserne undervejs.
Bl.a. blev de templatiseret for at understøtte andre tegntyper end "char"
(f.eks. "wchar_t"), der blev tilføjet locale (lande specifikke kodning af
f.eks. klokkeslet, datoer, decimal-punkt etc.) og klasserne kom til at ligge
i "namespace std".
> Så vidt jeg kan se er det heller ikke alle filer, hvor man kan fjerne .h
> (f.eks. stdlib.h) ... men man kan godt skrive .h på alle filer. Så måske
gør
> de det for simpelhedens skyld ... ?
I C++ hedder det "include <cstdlib>". "include <stdlib.h>" er C eller
pre-standard C++.
Mange compilere understøtter forsat den gamle form, for at være compatible.
Typisk kommer klasserne til at ligge i globalt namespace, når man bruger
<stdlib.h> formen.
> Hvorfor skal man egentlig skrive .h på nogle filer og behøves ikke på
> andre? - betyder det noget bestem om der står .h eller ikke?
>
På forskellige platforme, var der lidt forskellig tradition for hvad
header-filerne hedder. Nogle kaldte dem ".h" og andre ".hpp". Standarden
fjernede endelserne, og lagde indholdet i "namespace std".
>
> Men synes du ikke også at man skal lære om char-arrays og pointere - evt.
> efter man har lært om strings.
Jo da. Jeg syntes naturligvis at man skal lære det hele! Men det tager tid,
og man kan blive overvældet før man får skrevet brugbare programmer.
Du skrev i dit oprindelige indlæg at du var nybegynder med C++. Derfor er
det bedre at starte med at lære at _bruge_ klassen "std::string", frem for
f.eks.:
* hvordan håndteres pointere
* hvad er en null-termineret streng
* hvad er en klasse
* hvordan _skriver_ man en klasse
Hvis først man vil skrive _robuste_ programmer, bliver det endnu værre.
Se f.eks. Bjarne Stroustrup papir "Learning Standard C++ as a New Language"
http://www.research.att.com/~bs/new_learning.pdf
> Jeg vil faktisk postulere at jeg er bedre til Visual Basic nu, fordi jeg
> først lærte QBasic (hvis du kender det) - det skal i hvert fald siges at
> QBasic er en del mere lavniveau'sk end Visual Basic!
>
Det kan jeg godt forstå. Jo mere man ved om hvad der sker, des bedre kan man
beherske værktøjet.
> > Hvilket materiale bliver der benyttet til undervisningen ?
>
> Jeg tror det er noget læreren eller måske en fra den skole, selv har
skrevet
> (det ser det i hvert fald ud til).
Husk den bog jeg anbefalede.
Venlig hilsen
Mogens Hansen