07. november 2003 - 21:32
Der er
9 kommentarer og 1 løsning
forskel på functions kald
Hvad er forskellen/resultatet af disse to kald void Obj::add(int& id, Obj* tval) { mymap[id] = tval; } og void Obj::add(int id, Obj* tval) { mymap[id] = tval; }
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
07. november 2003 - 21:35
#1
Ingen. Forskellen er nemlig kun hvis du ændrer i id og det gør du ikke.
07. november 2003 - 21:42
#2
Med den øverste vil ændringer af id have effekt på den variabel du kalder metoden med. int p = 0; int &q = p; q++; cout << p << endl; Output: 1 Det vil ikke ske i den nederste. Du kan kigge mere i din bog, hvis du har en, kig under "call-by-reference" og "call-by-value".
07. november 2003 - 22:00
#3
Hvad med den anden vej? (jeg vil gerne være 100% sikker på at jeg har forstået de her ting nu) int& a() { return mya; } int b() { return mya; } med a() vil mya ændres int a = a(); a = 10;//nu er mya = 10? int b = b() b = 11; //mya uændret?
07. november 2003 - 22:09
#4
Det her eksempel illustrerer vist: #include <iostream> using namespace std; void test1(int v) { v++; } void test2(int& v) { v++; } void test3(int *v) { (*v)++; } int test4() { return 123; } static int v123 = 123; int& test5() { return v123; } int *test6() { return &v123; } int main() { int v = 0; test1(v); cout << v << endl; test2(v); cout << v << endl; test3(&v); cout << v << endl; cout << test4() << endl; cout << test5() << endl; cout << *(test6()) << endl; return 0; }
07. november 2003 - 22:16
#5
Her er et tilsvarende eksempel i Java: public class Call { private static void test1(int v) { v++; } private static void test2(MyInt v) { v.setV(v.getV()+1); } private static void test3(int[] v) { v[0]++; } public static void main(String[] args) { int v1 = 0; test1(v1); System.out.println(v1); MyInt v2 = new MyInt(); v2.setV(0); test2(v2); System.out.println(v2.getV()); int[] v3 = new int[1]; v3[0] = 0; test3(v3); System.out.println(v3[0]); } } class MyInt { private int v; public int getV() { return v; } public void setV(int i) { v = i; } }
07. november 2003 - 22:53
#6
Jeg kan stadig ikke se hvorfor man skal vælge den ene frem for den anden af din test5() og int test7(){ return v123;}
07. november 2003 - 22:56
#7
Der er ingen forskel på dem (test7 er det samme som test4). Der er derimod markant forskel på test1 og test2.
07. november 2003 - 23:04
#8
Tak Arne og Søren, det er virklig et imponerende stykke "græsrods" arbejde i gør her på Eksperten.
09. november 2003 - 12:05
#9
Der er jo faktisk en forskel på test4() og test5() int test4() { return v123;//en taste fejl at det var 123 og ikke v123 } static int v123 = 123; int& test5() { return v123; } da test5() = 100; jo faktisk ændrer på v123 hvorimod test4() = 100; ikke er lovlig
09. november 2003 - 12:27
#10
Det har du helt ret i. Beklager. Jeg har aldrig set eller brugt den konstruktion.
Kurser inden for grundlæggende programmering