/ 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
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
C++ - Kalde en constructor fra en anden.
Fra : Martin M. Pedersen


Dato : 20-04-07 23:08

Hvordan kan man kalde en constructor fra en anden constructor ?
Jeg vil gerne have A::A(int b) til at kalde A::A().

#include <iostream>

using namespace std;

class A {

public:
A();
A(int b);

int _a;
};

A::A() {
_a=7;
}

A::A(int b) {
A(); // Denne linie er forkert, men hvad skal man skrive ?
}


int main()
{
A a(1);
cout << a._a << endl;

return 1;
}

 
 
Arne Vajhøj (21-04-2007)
Kommentar
Fra : Arne Vajhøj


Dato : 21-04-07 00:08

Martin M. Pedersen wrote:
> Hvordan kan man kalde en constructor fra en anden constructor ?
> Jeg vil gerne have A::A(int b) til at kalde A::A().
>
> #include <iostream>
>
> using namespace std;
>
> class A {
>
> public:
> A();
> A(int b);
>
> int _a;
> };
>
> A::A() {
> _a=7;
> }
>
> A::A(int b) {
> A(); // Denne linie er forkert, men hvad skal man skrive ?
> }

http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3

Arne

Martin M. Pedersen (21-04-2007)
Kommentar
Fra : Martin M. Pedersen


Dato : 21-04-07 08:52

Arne Vajhøj wrote:
> Martin M. Pedersen wrote:
>> Hvordan kan man kalde en constructor fra en anden constructor ?
>> Jeg vil gerne have A::A(int b) til at kalde A::A().
>>
>> [...]

>
> http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3
>

OK. Det var en god ide med en fælles init-funktionen for de to constructor.

/Martin

Michael Rasmussen (21-04-2007)
Kommentar
Fra : Michael Rasmussen


Dato : 21-04-07 00:22

On Sat, 21 Apr 2007 00:08:00 +0200
"Martin M. Pedersen" <traxplayer@gmail.com> wrote:

> A::A(int b) {
> A(); // Denne linie er forkert, men hvad skal man skrive ?
Jeg tror, du forsøger dig med Java i C++? Man ville dog nok gøre det
omvendt, altså få default ctor til at kalde en specifik ctor med
default værdier.

Hvis du er ude i den type problemstilling, bør du forsøge at løse det
på anden vis i C++ - hint; dit design er ikke optimalt for en C++
løsning.

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.

Martin M. Pedersen (21-04-2007)
Kommentar
Fra : Martin M. Pedersen


Dato : 21-04-07 08:51

Michael Rasmussen wrote:
> On Sat, 21 Apr 2007 00:08:00 +0200
> "Martin M. Pedersen" <traxplayer@gmail.com> wrote:
>
>> A::A(int b) {
>> A(); // Denne linie er forkert, men hvad skal man skrive ?
> Jeg tror, du forsøger dig med Java i C++? Man ville dog nok gøre det
> omvendt, altså få default ctor til at kalde en specifik ctor med
> default værdier.

Lige præcist. Koden stammer oprindeligt fra Java.

>
> Hvis du er ude i den type problemstilling, bør du forsøge at løse det
> på anden vis i C++ - hint; dit design er ikke optimalt for en C++
> løsning.
>

OK. Det er muligt. Tak

/Martin


Mogens Hansen (21-04-2007)
Kommentar
Fra : Mogens Hansen


Dato : 21-04-07 16:23


"Martin M. Pedersen" <traxplayer@gmail.com> wrote in message
news:462939e4$0$52105$edfadb0f@dread11.news.tele.dk...
> Hvordan kan man kalde en constructor fra en anden constructor ?
> Jeg vil gerne have A::A(int b) til at kalde A::A().
>
> #include <iostream>
>
> using namespace std;
>
> class A {
>
> public:
> A();
> A(int b);
>
> int _a;

Ting der starter med underscore er forbeholdt implementering (compiler,
runtime bibliotek) - foretræk f.eks. "a_" i stedet.

> };
>
> A::A() {
> _a=7;
> }

Foretræk initialisering frem for tildeling:
A::A() :
a_(7)
{
}

>
> A::A(int b) {
> A(); // Denne linie er forkert, men hvad skal man skrive ?
> }

Man kan ikke kalde en constructor fra en anden constructor.
I næste version C++ (C++ 0x) vil man kunne skrive
A::A(int b) :
A()
{
}

Det kaldes "forwarding constructor".
Iøvrigt er det formodentlig nærmere noget i retningen af dette, du ønsker
A::A() :
A(7) // forwardign constructor - legal C++ 0x !!!
{
}

og det løser du nemmest på nuværende tidspunkt med default parametre


class A
{
public:
A(int b = 7);

int a_;
};

A::A(int b) :
a_(b)
{
}

Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407858
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste