instans [enZsdanOs] subst. -en, -er, -erne1. et trin i en række af myndigheder, fx af domstole d appellere en sag til en højere instans · sagen er behandlet i første instans · vi vil føre sagen gennem alle instanser · jeg ved ikke hvilken instans jeg skal klage til · ministeriet er den øverste instans i denne sag e retsinstans· i første instans først og fremmest d ansvaret for hunden påhviler i første instans ejeren· i sidste instans udtryk for at noget er den vigtigste el. grundlæggende del af en sammenhæng = I SIDSTE ENDE, NÅR ALT KOMMER TIL ALT, TIL SYVENDE OG SIDST d i sidste instans er det et spørgsmål om penge !
// klassen MinKlasse class MinKlasse { private: int v; public: MinKlasse() { v = 123; }; void MinMetode() { cout << v << endl; }; static void MinStaticMetode() { cout << "hello" << endl; }; };
int main() { MinKlasse::MinStaticMetode(); // vi kalder en statisk metode MinKlasse mininstans; // vi laver en instans af klassen MinKlasse mininstans.MinMetode(); // vi kalder en ikke-statisk metode på instansen return 0; }
Pånær at det ikke længere heddeer funktioner, men metoder.
F. eks.
class Bil { private int døre;
public Bil(int d) { this.døre = d; }
public void setDøre(int d) { this.døre = d; }
public int getDøre() { return this.døre; } }
Klassen hedder "Bil". "døre" er en attribut. "getDøre" og "setDøre" er metoder. Metoden "Bil" er en instantiator som danner en instans af klassen "Bil".
herefter kan man
Bil minEllert = new Bil(1); Bil minVolvo = new Bil(4); Bil minBMW;
minBMW = minEllert; minBMW.setDøre(4); // Ellers er det nok ikke en BMW
minEllert, minVolvo og minBMW er variable af typen "Bil". Når de indeholder noget er det en instans af klassen "Bil". Bemærk at minBMW ikke indeholder noget til start (den er instantieret til værdien null) og indeholder dermed ikke en instans af "Bil" før at sætningen minBMW = minEllert bliver kørt.
arne_v> fint eksempel syntes jeg..... men hvorfor anvender man så statiske metoder. Er det så fordi men når man anvender statiske metoder, så kan metoden kun køres indenfor den klasse metoden tilhører?! Mens ikke statiske metoder kan køreres også kan køres udenfor klassen?!
Nej en statisk metode er en metode som p.g.a. sin natur ikke behøver en instans.
Hvis vi kigger på mit eksempel:
MinMetode bruger member v og kræver derfor en instans for at have en v.
MinStaticMetode bruger ikke v eller andre ting der kræver en instans. Derfor kan den være static.
Et god eksempel på hvorfor man kunen ønske at have en static metode er singleton pattern, hvor man har en private constructor men kalder en statisk metode til at hente en instans af objektet.
De statiske metoder som I skrver om kalders også for klasse-metoder på OO-sprog.
Synes godt om
Slettet bruger
09. juni 2003 - 13:15#22
føler mig lidt som en idiot... har vidst glemt ALT for meget c++ må jeg erkende :(
Dvs at hvis den metode jeg ønsker at anvende, ikke skal bruge andre data fra klassen fx v så er det ok den er statisk. Men hvis den metode jeg ønsker at benytte mig af kræver yderligere data fra klassen, fx v skal er jeg nød til først at lave en instans, som derved får adgang til v.
Smag og behag er lidt forskellig. Men jeg laver normalt kun en metod estatic hvis jeg ved at jeg kan få brug for den som static - ikke bare fordi den kunne laves static.
Det som du har brug for at vide mere om er ikke nødvendigvis C++ men OO-programmering.
generelt vil jeg nok sige at klassemetoder ikke er noget man skal arbejde med før at man er godt vant til OOP. Ellers risikerer man hutigt at lave noget underligt snask som ikke rigtig er OO.
Din vending med "at få adgang til v" vidner om en meget snæver tilgang til hvad objekter egentlig er - hvis der er nogle data som man gerne vil arbejde på, skal det der forarbejder disse data nødvendigvis være en instans-metode - ellers ikke.
Jeg kan komme med masser af eksempler på situationer hvor man vælger at lave instans-metoder som *ikke* bruger attributterne i objektet og hvor det alligevel er hensigtsmæssigt at insistere på at man skal have en instans for at kunne kalde metoden.
arne_v tak for hjælpen.. har sat pointene 15 op, håber det er okay ellers må du lige råbe højt :)
darkstar> ja det er desværre længe siden jeg fik undervisning i C++, og dengang havde det desværre ikke min store interesse. Men det får jeg nu betale for nu :(
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.