/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
C++ pointere...
Fra : Lasse Madsen


Dato : 23-11-04 20:46

Hej

En kammerat og jeg sidder og disskutere... hans synspunkt:
Pointere bruges ikke i C++ vil man f.eks. kopiere en streng a over i b kan
man bare skrive b=a;

Hvor jeg er gammel indavlet C bruger og holder på at selvfølgelig skal man
da bruge pointere i C++ det kan man ikke slippe for (jeg har aldrig brugt
c++ men det forekommer mig bare mystisk andet) og man i den forbindelse
ville bruge strcpy (a,b); osv... som håndtere strengene som array's der
dereferes som pointere...

Hvad siger i ? - er jeg outdated ?

madsen



 
 
Mogens Hansen (23-11-2004)
Kommentar
Fra : Mogens Hansen


Dato : 23-11-04 21:06


"Lasse Madsen" <Lasse.madsen@elektronik.dk> wrote in message
news:co041j$1kio$1@news.cybercity.dk...
> Hej
>
> En kammerat og jeg sidder og disskutere... hans synspunkt:
> Pointere bruges ikke i C++ vil man f.eks. kopiere en streng a over i b kan
> man bare skrive b=a;

Det kommer jo an på hvilken type "a" og "b" har.
Hvis "b" er af typen "std::string", som er default valget i C++ til
tekst-håndtering, og "a" er af typen "std::string" eller "const char*" så
kan man blot skrive "b = a;"

Hvis både "a" og "b" er af typen "char *"/"const char'" forholder det sig
præcis som i C - og det er altså ikke tilstrækkeligt at skrive "b = a;"

>
> Hvor jeg er gammel indavlet C bruger og holder på at selvfølgelig skal man
> da bruge pointere i C++ det kan man ikke slippe for

Man kan naturligvis benytte pointere i C++ på samme måde som i C - men
behøver det ikke.
Man vil dog i C++ foretrække at holde eksplicit, manuel hukommelsesstyring
væk på applikationsprogrammering.
Derfor vil man bruge klasser som "std::string" til teksthåndtering,
"std::vector" til arrays med dynamisk størrelse.

På måde kan man skrive temmeligt meget nyttigt C++ kode uden at skulle
benytte pointere - og ikke mindst pointer aritmetik og manuel
hukommelsesstyring.

F.eks. vil nedenstående program åbne en fil, læse alle ordene, og tælle hvor
mange gange hvert ord optræder og udskrive sammenhængen mellem ord og antal
gange det findes på skærmen.
Bemærk at programmet fungerer på vilkårligt store filer, med vilkårligt
mange ord af vilkårlig længe - kun begrænset af computerens hukommelse.
Bemærk at der ikke er nogen manuel hukommelsesstyring eller pointer
aritmetik.
Bemærk også at programmet er komplet med hensyn til fejlhåndtering.

<C++ kode>
#include <iostream>
#include <fstream>
#include <string>
#include <functional>
#include <map>
#include <cstdlib>

int main(int argc, char* argv[])
{
using namespace std;

if(2 != argc) {
cerr << "Error: Expected exactly one parameter with the name of the
file to read" << endl;
return EXIT_FAILURE;
}

const char* file_name = argv[1];
ifstream file(file_name);
if(!file) {
cerr << "Unable to open file \"" << file_name << "\"" << endl;
return EXIT_FAILURE;
}

// Read the file and increment the wordcount
string word;
map<string, unsigned> word_2_count;
while(file >> word) {
word_2_count[word]++;
}

cout << "Wordcount in file \"" << file_name << "\" ordered alphabetic\n";
for(map<string, unsigned>::const_iterator i = word_2_count.begin();
word_2_count.end() != i; ++i) {
cout << i->first << " found " << i->second << " times\n";
}
}
<C++ kode>

> (jeg har aldrig brugt c++ men det forekommer mig bare mystisk andet) og
> man i den forbindelse ville bruge strcpy (a,b); osv... som håndtere
> strengene som array's der dereferes som pointere...

Nej, man vil i C++ prøve at undgå at bruge "strcpy" med videre, fordi det
typisk er ledsaget af manuel, explicit hukommelseshåndtering og forholdvis
nemme muligheder for fejl som buffer-overflow etc.

>
> Hvad siger i ? - er jeg outdated ?

Hvis det drejer sig om almindelig streng-håndtering i C++, så er svaret ja.
Det er dog overkommeligt at lære.

Venlig hilsen

Mogens Hansen



Thorsten Ottosen (08-12-2004)
Kommentar
Fra : Thorsten Ottosen


Dato : 08-12-04 21:30

"Lasse Madsen" <Lasse.madsen@elektronik.dk> wrote in message
news:co041j$1kio$1@news.cybercity.dk...
| Hej
|
| En kammerat og jeg sidder og disskutere... hans synspunkt:
| Pointere bruges ikke i C++.

jo, men mindst muligt og ofte kun i form a smart pointere.

| Hvor jeg er gammel indavlet C bruger og holder på at selvfølgelig skal man
| da bruge pointere i C++ det kan man ikke slippe for (jeg har aldrig brugt
| c++ men det forekommer mig bare mystisk andet) og man i den forbindelse
| ville bruge strcpy (a,b); osv... som håndtere strengene som array's der
| dereferes som pointere...
|
| Hvad siger i ? - er jeg outdated ?

ja

Du bruger heller ikke indbyggede arrays i C++.

Start med std::vector<T> og dernæst boost::array<T,size> i den rækkefølge.

mvh

Thorsten



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste