Avatar billede danielhep Nybegynder
14. februar 2003 - 12:58 Der er 7 kommentarer og
2 løsninger

Namespace ?? c++

using namespace std;

jeg er ikke helt med..Så bruger man det her og så behøver man ligepludselig ikke at skrive ".h"  ved header filer...Hvad er det for noget underligt noget??

Hvad betyder det, og hvad er det for noget i sammenhængen med c/c++ ?

Mvh

Daniel
Avatar billede arne_v Ekspert
14. februar 2003 - 13:08 #1
namespaces betyder at man kan have klasser med samme navn i forskellig namespaces.

Alle ANSI C++ tingene ligger i namespace std.

Man kan enten anngive mitnamespace::mitnavn eller lave en using namespace mitnamespace og bare bruge mitnavn.

using namespace std gør at man kane brug f.eks. con og cout usen
std:: prefix.

Namespaces kom med ANSI C++ og det samme gjorde header-filer
uden .H, men strengt tagethar de to ting ikke noget med hinanden at gøre.

Namespace i C++ er det samme som pakke i Java.

(der er bare ikke nogen kobling til directory-struktur ligesom i java)
Avatar billede arne_v Ekspert
14. februar 2003 - 13:09 #2
Et lille eksempel som illustrerer:

#include <iostream>

using namespace std;

namespace test {
  namespace test1 {
      class Test {
        public:
            void test() { cout << "1" << endl; };
      };
  }
  namespace test2 {
      class Test {
        public:
            void test() { cout << "2" << endl; };
      };
  }
}

int main()
{
  (new test::test1::Test())->test();
  (new test::test2::Test())->test();
  exit(0);
}
Avatar billede segmose Nybegynder
14. februar 2003 - 13:13 #3
using namespace std;

er istedet for at skulle skrive

std::cout << "noget";

kan du nu skrive

cout << "noget";

namespaces er for at du nemmere kan bruge diverse navne
som ellers kunne være brugt af andre bibliotekerne i dit
eget program. Hvis et bibliotek Gates har definere Bill som
funktion, kan du lave dit eget namespace Regning hvor Bill
også er en funktion, du kan så kalde dem med Gates::Bill()
og Regning::Bill().

Includes uden .h er for at adskille C og C++ include filerne
i C++.

jeg er ikke helt med..Så bruger man det her og så behøver man ligepludselig ikke at skrive ".h"  ved header filer...Hvad er det for noget underligt noget??
Avatar billede danielhep Nybegynder
14. februar 2003 - 13:13 #4
Arne, jeg kan høre at du har styr på det med namespace..Men jeg kan simpelhen ikke se hvad du mener i dit eks.....Jeg forstår ikke lige hvad det er som er pointen i eks....

mvh

Daniel
Avatar billede danielhep Nybegynder
14. februar 2003 - 13:15 #5
<<Segmose
Jamen jeg kan da også bare includere #include <iostream.h> og bruge cout
<< "hej" ;
Avatar billede dk_ice Nybegynder
14. februar 2003 - 13:16 #6
Arne har 2 klasser test, som han adskiller ved at lægge dem i 2 forskellige namespaces...
Avatar billede arne_v Ekspert
14. februar 2003 - 13:17 #7
Mit eksempel som naturligvis er absurd udfra en formåls-betragtning var
for at illustrere, hvordan man kan lave signe egne namespaces og
have 2 klasser med samme navn og bruge dem begge i samme kode.

Ligesom java packages.
Avatar billede arne_v Ekspert
14. februar 2003 - 13:19 #8
Det er rigt at du kan include .H og undgå std.

Ellers ville man jo ikke kunne compile et eneste stykke
eksisterende C++ koden uden at skulle ændre det når man skiftede
til en ANSI C++ compiler.

Men uden .H og med using namespace std er det rigtige.

Og jeg kunne sagtens forestille mig at man på et tidspunkt fjernede
.H varianterne. Der kan måske gå 10 år, men på et tidspunkt tror jeg
de ryger.
Avatar billede danielhep Nybegynder
14. februar 2003 - 13:21 #9
Det gør de sikkert....Ok jeg vil kigge lidt mere på det...Takker for hjælpen

Mvh

Daniel
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester