Avatar billede bentblod Nybegynder
05. januar 2005 - 01:12 Der er 12 kommentarer og
1 løsning

fra java til c++

Hej jeg har nogle spørgsmål ang. c++, jeg har rodet en masse med java og kender rimelig godt til det efterhånden. Der er så nogle tegn jeg lige står og mangler for at komme igang med c++.
Hvordan laver jeg f.eks. (som i java) this.navn i c++ ?
Hvordan binder jeg ting sammen i en tekst f.eks. (som i java) string tekst = "Navn: " + navn + ", efternavn: " + efternavn;

Hvad betyder tegnet & i denne sætning:
float& hoej(float& x, float &y){
} ?

hvad betyder * i denne sætning: int *ptr = 0; ?

Håber der er nogen der lige kan give mig et godt svar på hvad de forskellige ting er og hvad de bruges til :)
Avatar billede bertelbrander Novice
05. januar 2005 - 01:18 #1
this hedder også this i C++, det er en pointer så man skal skrive:
this->navn;

C++ har std::string, som har en + og en += operator. Man kan ikke lægge char * eller "strege" sammen i C++.
Man kan godt:
std::string foo = "Peter";
std::string Navn = std::string("Ole") + foo + "Nielsen";
Men man kan ikke:
std::string bar = "Ole" + "Nielsen";

float &hoej(..) betyder at hoej returnerer en reference til en float

int *ptr = 0; betyder at ptr er en pointer til int, ptr bliver sat til at være 0, dvs den er en null poiner, den tilskrives ikke en værdi.
Avatar billede bentblod Nybegynder
05. januar 2005 - 01:21 #2
ahh cool nok, men forstår ikke helt din forklaring med &tegnet hvis du lige vil skære det lidt mere ud i pap og så skrive som svar ville det være perfekt :)
Avatar billede bertelbrander Novice
05. januar 2005 - 01:26 #3
#include <iostream>

void foo(int &x)
{
  x = 12;
}

void bar(int *x)
{
  *x = 34;
}

void baz(int y)
{
  y = 56;
}

int main()
{
  int a = 1, b = 2, c = 3;
  std::cout << "A: " << a << ", B: " << b << ", C: " << c << std::endl;
  foo(a);
  bar(&b); // address of operator
  baz(c);
  std::cout << "A: " << a << ", B: " << b << ", C: " << c << std::endl;
}
Avatar billede bertelbrander Novice
05. januar 2005 - 01:28 #4
Prøv at køre programmet og studer resultatet.

En reference sættes til at referere til noget når den bliver oprettet, en pointer kan sættes til at pege på noget dynamisk.
Avatar billede bentblod Nybegynder
05. januar 2005 - 01:28 #5
ok har nu prøvet at lave den del hvor man sætter tekst sammen, men det virker ikke, kan du sige hvad fejlen i denne tekst er?

std::string tekst = std::string("Navn: ") + navn + std::string(", Max fart: ") + maxFart + std::string(", Pris: ") + pris;

navn, maxFart og pris er variabler der er defineret højere oppe. Hvordan skal jeg ellers sætte dem sammen så?
Avatar billede bertelbrander Novice
05. januar 2005 - 01:31 #6
Hvilken type har navn, maxfart og pris ?
Avatar billede bentblod Nybegynder
05. januar 2005 - 01:34 #7
navn = string
maxFart = int
pris = int
Avatar billede bertelbrander Novice
05. januar 2005 - 01:36 #8
Man kan ikke sætte en int/double/osv sammen med en streng, man skal konvertere dem til en string først, f.ex:

#include <iostream>
#include <sstream>

template <typename T>
std::string ToString(T t)
{
  std::stringstream ss;
  ss << t;
  return ss.str();
}

int main()
{
  std::string navn = "Ole Petersen";
  int maxFart = 123;
  double pris = 11.55;
  std::string tekst = std::string("Navn: ") + navn + std::string(", Max fart: ") + ToString(maxFart) + std::string(", Pris: ") + ToString(pris);
  std::cout << tekst << std::endl;
}
Avatar billede bentblod Nybegynder
05. januar 2005 - 01:42 #9
Ok har lidt problemer med at sætte alt det sammen med det jeg har lavet, kan du ikke sætte den ind i min kode så det passer sammen? Koden er herunder:

-----------bil.h--------------------

#include <iostream>
#include <string>

using namespace std;
class Bil
{
private:
  string navn;
  int maxFart;
  int pris;
public:
  Bil(void);
  ~Bil(void);
  void setNavn(string navn);
  void setMaxFart(int maxFart);
  void setPris(int pris);
  int getPris();
  int getMaxFart();
  string getNavn();
  string toString();
};

------------bil.cpp---------------

#include "bil.h"
#include <string>
using namespace std;


Bil::Bil(void) {}
Bil::~Bil(void) {}
void Bil::setMaxFart(int nMaxFart){
  maxFart = nMaxFart;

void Bil::setNavn(string nNavn){
  navn = nNavn;

void Bil::setPris(int nPris){
  pris = nPris;

string Bil::toString(){
std::string tekst = std::string("Navn: ") + navn + std::string(", Max fart: ") + ToString(maxFart) + std::string(", Pris: ") + ToString(pris);
return tekst;
}   
int Bil::getPris(){
  return pris;
}

int Bil::getMaxFart(){
  return maxFart;
}

string Bil::getNavn(){
  return navn;
}

-------------brugbil.cpp---------------
#include"bil.h"
#include <string>
int main(){
  Bil min_bil;
  min_bil.setMaxFart(250);
  min_bil.setNavn("Bilen");
  min_bil.setPris(200000);
 
  int uPris = min_bil.getPris();
  int uMaxFart = min_bil.getMaxFart();
  string uNavn = min_bil.getNavn();
 
  std::cout << "Navn: " << uNavn << std::endl;
  std::cout << "Max fart: " << uMaxFart << std::endl; 
  std::cout << "Pris: " << uPris << std::endl;

  return 0;
}
Avatar billede bertelbrander Novice
05. januar 2005 - 01:48 #10
Du mangler vist kun at tilføje dette til bil.h

#include <sstream>

template <typename T>
std::string ToString(T t)
{
  std::stringstream ss;
  ss << t;
  return ss.str();
}
Avatar billede bentblod Nybegynder
05. januar 2005 - 01:54 #11
ahh tak, så virker det som det skal det hele :) skriv lige som svar :)
Avatar billede bertelbrander Novice
05. januar 2005 - 01:55 #12
Jeg samler ikke på point.
Skriv selv et svar & accepter det.
Avatar billede bentblod Nybegynder
05. januar 2005 - 01:56 #13
Ok, fair nok. Men tusinde tak for svaret hvertfald :)
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