Föreläsningsanteckningar OOP-föreläsning 3, måndag 10 september 2007 ==================================================================== Idag ==== 1. Inlämningsuppgiften om testning 2. I stället för getch() 3. Allokering av objekt och arrayer med new 4. Allokering och sortering av array 1. Inlämningsuppgiften om testning ================================== Varför testar man? Vad är ett lyckat test Olika typer av testning: unit testing, integration testing, system testing, installation testing, ... Testa (a) mycket, (b) automatiskt och (c) hela tiden Val av testfall 2. I stället för getch() ======================== hello.cpp --------- #include int main() { std::cout << "Hej igen, v\204rlden!\n"; std::cout << "Tryck RETUR f\224r att avsluta programmet.\n"; while (std::cin.get() != '\n') ; } 3. Allokering av objekt och arrayer med new =========================================== c-allokering.c -------------- /* c-allokering.c */ #include #include struct svamp { double fotbredd; int hattstatus; }; int main(void) { struct svamp svamp; struct svamp *svamppekare; struct svamp *svamparray; int antal_svampar; int i; svamp.fotbredd = 1.2; /* svamppekare->fotbredd = 2.7; -- Fel! Varför? */ svamppekare = malloc(sizeof(struct svamp)); if (svamppekare == NULL) { fprintf(stderr, "Ledsen error. Kunde inte skapa plats för %d bytes.\n", (int)sizeof(struct svamp)); exit(EXIT_FAILURE); } svamppekare->fotbredd = 2.7; /* OK nu! */ (*svamppekare).fotbredd = 2.7; /* Samma sak! */ printf("Hur många svampar vill du lagra? "); scanf("%d", &antal_svampar); svamparray = malloc(antal_svampar * sizeof(struct svamp)); if (svamparray == NULL) { fprintf(stderr, "Ledsen error. Kunde inte skapa plats för %d svampar.\n", antal_svampar); exit(EXIT_FAILURE); } for (i = 0; i < antal_svampar; ++i) svamparray[i].fotbredd = 3.9; free(svamppekare); free(svamparray); return 0; } Körexempel med c-allokering --------------------------- Hur många svampar vill du lagra? 700000000 Ledsen error. Kunde inte skapa plats för 700000000 svampar. cpp-allokering.cpp ------------------ // cpp-allokering.cpp #include using namespace std; class Svamp { public: double fotbredd; int hattstatus; }; int main() { Svamp svamp; Svamp *svamppekare; Svamp *svamparray; int antal_svampar; int i; svamp.fotbredd = 1.2; // svamppekare->fotbredd = 2.7; -- Fel! Varför? svamppekare = new Svamp; svamppekare->fotbredd = 2.7; // OK nu! (*svamppekare).fotbredd = 2.7; // Samma sak! cout << "Hur många svampar vill du lagra? "; cin >> antal_svampar; svamparray = new Svamp[antal_svampar]; for (i = 0; i < antal_svampar; ++i) svamparray[i].fotbredd = 3.9; delete svamppekare; delete [] svamparray; return 0; } Körexempel med cpp-allokering ----------------------------- Hur många svampar vill du lagra? 700000000 terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc Abort (core dumped) 4. Allokering och sortering av array ==================================== sortera-1.cpp ------------- // sortera-1.cpp #include using namespace std; #include "student.h" int main() { Student* studenter; int antal; cout << "Ge antal studenter: "; cin >> antal; studenter = new Student[antal]; for (int i = 0; i < antal; ++i) studenter[i].las(); // Sortera efter ålder for (int i = 0; i < antal - 1; ++i) { for (int k = i + 1; k < antal; ++k) { if (studenter[k].yngre(studenter[i])) { Student temp = studenter[i]; studenter[i] = studenter[k]; studenter[k] = temp; } } } for (int i = 0; i < antal; ++i) studenter[i].skriv(); delete [] studenter; } sortera-2.cpp (överkurs) ------------------------ // sortera-2.cpp #include #include using namespace std; #include "student.h" int main() { int antal; cout << "Ge antal studenter: "; cin >> antal; vector studenter(antal); for (int i = 0; i < antal; ++i) studenter[i].las(); // Sortera efter ålder for (int i = 0; i < antal - 1; ++i) { for (int k = i + 1; k < antal; ++k) { if (studenter[k].yngre(studenter[i])) { Student temp = studenter[i]; studenter[i] = studenter[k]; studenter[k] = temp; } } } for (int i = 0; i < antal; ++i) studenter[i].skriv(); } sortera-3.cpp (överkurs) ------------------------ // sortera-3.cpp #include #include using namespace std; #include "student.h" int main() { int antal; cout << "Ge antal studenter: "; cin >> antal; vector studenter(antal); for (int i = 0; i < antal; ++i) studenter[i].las(); // Sortera efter ålder // sort(studenter); -- Nej, det vore för lätt! sort(studenter.begin(), studenter.end()); // Nästan! for (int i = 0; i < antal; ++i) studenter[i].skriv(); } person.h (överkurs) ------------------- bool operator<(Person p2) const { return alder < p2.alder; }