Avatar billede thomas_nj Nybegynder
17. maj 2005 - 22:30 Der er 9 kommentarer og
1 løsning

Love jeg ikke ændrer pointeren

Hej eksperter

  Jeg har inde i en klasse en pointer til en anden klasse. Nu har den ene klasse en vis funktion som jeg gerne vil gøre const, men det kan jeg ikke da jeg ikke ved hvordan jeg lover ikke at ændre på pointeren.

  Kodeeksempel:

#include <iostream>
#include <cstdlib>

using namespace std;

class test
{
public:
  test(int i)
  {
    this->a=i;
  }
  int a;
};

class test2
{
public:
test2(int a)
{
  tmp=new test(a);
}

void vis(void) const
{
  cout<<tmp->a<<endl;  // Her skal jeg finde en måde at love på   
                        // jeg ikke ændrer noget
}
test *tmp;
};


int main()
{
    test2 hej(3);
    test2.vis();
    system("pause");
    return 0;
}

  Dette giver 2 spørgsmål, der kan løse problemet.

  1) Kan jeg på en eller anden måde "love" compileren at jeg ikke ændrer pointeren?

  2) Kan jeg på en eller anden måde helt undgå pointeren. Kan objektet test2 godt indeholde test1 objektet på en anden måde?
Avatar billede arne_v Ekspert
17. maj 2005 - 22:53 #1
ja du kan undgå pointeren ved bare ar erklære den uden *, men men men det vil jeg
bestemt fraråde
Avatar billede arne_v Ekspert
17. maj 2005 - 22:53 #2
hvilken fejl får du med hvilken compile ?

det compiler fint hos mig (mingw) når jeg retter til hej.vis()
Avatar billede bertelbrander Novice
17. maj 2005 - 23:16 #3
Du kan bruge:

  test * const tmp;

Eller lave get funktion i test, der giver dig en const ...
Avatar billede thomas_nj Nybegynder
18. maj 2005 - 15:35 #4
Tjaeh, ved ikke lige om det er fordi nogle stjerner har skiftet stilling men nu virker det pludselig. Kan huske at i den fejlmeddelelse jeg fik stor der noget med linker ld
Avatar billede thomas_nj Nybegynder
20. maj 2005 - 17:05 #5
Virker til at den nyeste beta af Dev-cpp opfører sig lidt underligt. I en constructor har jeg en const char&. Sender jeg 'r' kommer den med en fejl men bruger jeg char tmp='r'; og sender den kommer der ingen fejl.
Dette kunne jeg til nøds forstå hvis den ikke efter at jeg rettede tilbage til 'r' compiler igen uden fejl. Det samme har gjort sig gældene for nogle parametre af typen int.

arne_v >> Har lige et lille spørgsmål, mere. Bare læg det i et svar. Findes der ikke en måde at rydde skærmen for tekst uden at bruge system("cls); Jeg er sikker på at jeg har fundet en eller anden måde at gøre det via cout men nu kan jeg ikke finde den igen.
  Du har vel ikke en ide.
Avatar billede bertelbrander Novice
21. maj 2005 - 02:26 #6
Man kan ikke gøre det med cout.

Du kan lave en funktion med konsol funktionerne:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_functions.asp

Flyt cursoren (SetConsoleCursorPosition) til toppen af skærmen og tegn et antal tomme linier (brug GetConsoleScreenBufferInfo til at finde ud af hvor mange), og flyt cursoren tilbage til toppen.
Avatar billede arne_v Ekspert
21. maj 2005 - 09:43 #7
der er ikke nogen standard måde at cleare en skærm på - hvis dit
vindue eller din skærm er VT et eller andet kompatibel bør du kunne:

cout << "\x1B[2J";

(windows kommado prompt er er *ikke* default VT kompatible, men diverse
telnet og xterm vinduer bør være det)
Avatar billede arne_v Ekspert
21. maj 2005 - 09:44 #8
jeg synes at det lyder suspekt med et argument til en constructor som er &
Avatar billede arne_v Ekspert
21. maj 2005 - 09:44 #9
og svar
Avatar billede thomas_nj Nybegynder
21. maj 2005 - 09:48 #10
det er nu const type&, har læst at det skulle være hurtigere at sende en refference end bare at sende en kopi.
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