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 fra SoftwareOne
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