C# struct met meerdere constructors

  • Onderwerp starter Onderwerp starter baws
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

baws

Terugkerende gebruiker
Lid geworden
9 apr 2010
Berichten
1.258
Hallo,
ik wil een struct met meerdere constructors maken maar dit lukt niet.

de opdracht.

De structure moet drie integer variabelen bevatten: hours, minutes en seconds.

- De structure moet de volgende drie constructors bevatten:



public Time(int seconds)

public Time(int minutes, int seconds)

public Time(int hours, int minutes, int seconds)

Zorg ervoor dat de constructor de juiste waarden toekent aan de interne variabelen.

Voorbeeld:

Time t = new Time(100)

Nu dient de structure t de volgende waarden te bevatten:

hours: 0

minutes: 1

seconds: 40
 
Ik zie het probleem niet helemaal (behalve het gebruik van struct ipv gewoon een object) welke code heb je al en waar loop je precies vast? Het is niet de bedoeling dat we je huiswerk gaan maken.
 
Code:
struct Time
        {
            public int hours = 0, minutes = 0, seconds = 0;

            public Time(int seconds)
            {

                hours = seconds / 3600;
                minutes = (seconds - (hours *60) ) / 60;
                seconds = seconds % 60;
            }

            public Time(int minutes, int seconds)
            {

                hours = hours % 24;
                minutes = minutes % 60;
                seconds = seconds % 60;
            }


            public Time(int hours, int minutes, int seconds)
            {
            
                hours= hours;
                minutes= minutes;
                seconds = seconds;
            }
}
dit heb ik al
 
Laatst bewerkt:
in principe is daar niet zoveel mis mee? wat lukt er niet? Een aantal pointers:

public struct Time
this.hours = seconds / 3600
 
assignments made to same variable did you mean to assign something else.
de waardes in de structs hebben dezelfde naam als de waardes die worden opgegeven in de constructors neem ik dan aan.
dat wordt dus verholpen door this. te gebruiken.
waarom moet de struct public zijn?
 
Laatst bewerkt:
Het is een goede conventie om altijd aan te geven wat de scope is van een object. De meeste talen hanteren de aanname dat elk object private is standaard.
 
ik krijg nog de melding
cannot have instance field initializers in structs
die slaat op de regel:
public int hours = 0, minutes = 0, seconds = 0;
als ik die regel weg haal worden alle this. objecten onderstreept met de fout:
' does not contain a definition for 'minutes' and no extension method 'minutes' accepting a first argument of type 'blabla....Track.Time' could be found (are you missing a using directive or an assembly reference?)
 
Moet ik even opzoeken, maar volgens mij klaagt die over "=0" structs horen velden te zetten via de interface. Volgens mij als je =0 weglaat werkt het goed.
 
Hij zal inderdaad klagen over de '=0' assignment. Bij een class is dat geen probleem, bij een struct niet. Bovendien is het ook niet nodig want een int heeft een standaard waarde van 0. Zodra je een instance maakt van je Time struct en niets in de constructor zet zullen alle 3 waarden 0 zijn.
 
Ok bedankt iedereen, het is gelukt en ik heb de code nog wat fraaier gemaakt.

public struct Time
{
public int hours, minutes, seconds;

public Time(int seconds)
{

this.hours = seconds / 3600;
this.minutes = (seconds - (hours * 60)) / 60;
this.seconds = seconds % 60;
}

public Time(int minutes, int seconds)
: this(minutes * 60 + seconds)
{

}


public Time(int hours, int minutes, int seconds)
: this(hours * 3600 + minutes, seconds)
{
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan