270 likes | 421 Views
ITEC 320. Lecture 26 C + + Introduction. Qualifications. Ten years of C++ development (albeit not fulltime) Written somewhere between 100-500kloc of C++ (GOW was 250kloc) Managed teams of programmers Developed API used by dozens of people, applications used by thousands
E N D
ITEC 320 Lecture 26 C++ Introduction
Qualifications • Ten years of C++ development (albeit not fulltime) • Written somewhere between 100-500kloc of C++ (GOW was 250kloc) • Managed teams of programmers • Developed API used by dozens of people, applications used by thousands • Point: I’m not just repeating what I read 15 minutes ago to you…
C++ • History of C++… • “C++ was designed to provide Simula’s facilities for program organization together with C’s efficiency and flexibility for systems programming. “ • Write coding in assembly, C, C++….
OO • Simula 67 • 1965 (Vietnam, civil rights, Thunderbirds debuted) • Based off of algol… • Introduced basics of OO programming that we use today • Classes, inheritance, class variables, instance variables, class methods (virtual)
C • Multiple people using a computer at the same time… • Broken project called Multics…. • Need was still there, it became UNIX • Needed a language for the new OS… • CPL,BCPL,B, then C!
Pictures C++ = + Simula 67 Beautiful yet impractical C Ridiculously fast, yet difficult to work with
Java • Some parts are C-like • Memory management? • Designed not to fail You Computer
C++ • Complete control • Assembly to OO • Memory management • Speed • Used widely Did you check if all seven pointers were non-null or only six? Do you feel lucky, well do ya? “If programming in Pascal is like being put in a straightjacket, then programming in C is like playing with knives, and programming in C++ is like juggling chainsaws.” – Anonymous
Hello World #include <iostream> #include <string> using namespace std; intmain(intargc, char** argv) { string hello = "Hello World"; cout << hello << endl; return 0; } System libraries Standard namespace (functions?) Function definition, entry point for every C/C++ program (command line args) String class and initialization Print to console Return code of program to OS Command Prompt: vi hello.cpp g++ -o Hello hello.cpp ./Hello Returns 0, can be used with scripts
Producing programs File.java File.class JVM Actual machine code javac java conversion file.cpp Machine code that executes file g++ –o file file.c
Tools • g++ - Free C++ compiler • VI / Emacs / Crimson editor (or others) • putty and rucs / your own linux machine • C++ should be portable between windows and linux…it usually isn’t • Develop on platform you use to demonstrate…
Memory Java C++
Hardware • 1 gigabyte =1024 megabytes • 1 megabyte = 1024 KB • 1 KB = 1024 bytes • 1 byte = 8 bits • Bit is a 0 or a 1 Byte (maybe) Address
Data table int a; a=4; 4 bytes of memory at location ------- OS give me 4 bytes Translate to binary OS store bits at location---- Bits stored in memory
Bits • What is the purpose of memory? 0 or 1 Base two versus base 10 0 1 2 3 4 5 7 6 A = 65 B = 66 C = 67 String One byte of memory Ascii table is 127 characters Binary int char 1 0 1 5 float 22 + 21 + 20 1111111 0000001
Heap versus stack • Heap = free memory • Stack = where programs are void first() { int a; intb; } int main() { intc; } Heap a b first(); c main
Using memory Java C++ Stack int first; int* a; a = new int; delete a; a = (int*)malloc(sizeof(int)); free(a); int a; String bob = new String(); bob = “Jones”; Stack Heap Heap Java magically takes care of cleaning it up C++ requires you manually clean up
Stack versus heap • Stack should be as small as possible • Function calls go on stack • Include local variables • Less that has to go on stack, better • Parameter passing • Copying memory == bad
C++ • Pointers • Contains a memory address, not data • Can allow strong or weak typing • int* • void* • Can point to N items of that particular type • int* a = new int[10]; • delete [] a;
More on arrays • Initializing arrays Java: int[] array = new int[10]; for (inti=0; i<array.length; i++) { array[i]=0; } C++: int* array = new int[10]; memset(array,sizeof(int)*10,0); Possible b/c of access C++ gives us
Using pointers • Creation • Dereference • Arrays int* a; a = new int; *a = 4; Put 4 into the address stored in A int array1[10]; int* array2 = new int[10]; array1[0] =4; array2[0]=4; 40 bytes of memory on stack 4 bytes of memory on stack C++ caveat: There is no length function like in java Have to keep track of yourself
Classes / Pointers class A { public: A(); void print(); private: intb; }; A::A() { b=4; } void A::print() { cout << b << endl; } A* example = new A(); example->print(); A object; object.print();
References • Local variable, points to memory address int* a = new int; int& b = a; *a=4; b=6; cout << a << “ “ << b <<endl; Java uses references everywhere However, when you send a parameter to a function it copies the var
Issues with pointers Function a -Creates memory for an array of 10 Function b Sets values of array Function c Frees memory Function d Prints out values Dangling pointer No way to know if it is good or not (NULL)
NULL • Universal • Doesn’t autoset to NULL, takes more work… int* a; a = new int; delete a; if (a != NULL) cout << *a << endl;
Protected memory • Whenever you steal something and are caught… • Whenever you access memory that doesn’t belong to you
Buffer overflows Buffer instruction 1, instruction 2 • Array of size 50 • Get value from web form • Write into array • You forgot to check the size • Overwrite memory in your program • Can causes new code • Or cause program to die What you wrote