1 / 40

C++

C++ Overview Input/Output New Data Types Expressions Declarations, Operators Control Structures. C++. 159.234. Bjarne Stroustrup. of AT&T Bell Laboratories. Designed and implemented a new language in the early 1980’s.

Télécharger la présentation

C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Overview Input/Output New Data Types Expressions Declarations, Operators Control Structures C++

  2. 159.234 Bjarne Stroustrup of AT&T Bell Laboratories Designed and implemented a new language in the early 1980’s. Initially called “C with Classes” it became known as C++, an incremental step up from C. It was designed to deliver: the flexibility and efficiency of C with the facilities for program organisation of the Simula language (usually referred to as object-oriented programming). C++

  3. 159.234 A word from the inventor C++ "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup http://www.research.att.com/~bs/C++.html

  4. Object Oriented Programming (OOP) language? • A programming language in which programmers define an abstract data type consisting of both: • dataand • the operations (functions) that can be applied to data.

  5. 159.234 AIMS C++ Make programming more enjoyable. Be a general purpose language that: is a better C supports data abstraction supports object-oriented programming supports generic programming

  6. 159.234 DESIGN PRINCIPLES Don’t get involved in a quest for perfection. Be useful immediately. Don’t try to force people. It is more important to allow a useful feature than to prevent every misuse. Leave no room for a lower-level language below C++ (except assembler). C++

  7. 159.234 Language rules: Provide as good support for user-defined types as for built-in types. Locality is good. Preprocessor usage should be eliminated. No gratuitous incompatibilities with C. If you don’t use a feature, you don’t pay for it. C++

  8. 159.234 COMMENTS C++ allows the use of // as a comment all text to the end of the line is ignored. Use /* ... */ for large multi-line blocks of comments // for small comments. // allows nesting of comments. Commenting out a large block of code does not work in C, if the block already contains a small comment. /* for (i=0;i<10;i++) { k = i*i; /*k is the square of i*/ } */ /* for (i=0;i<10;i++) { k = i*i; // this is ok } */ Comments

  9. 159.234 COMMENTS Comments Sometimes its useful to use a pre-processor directive to comment a large chunk of code: #if 0 commented out code with /* comments */ #endif

  10. 159.234 Input and Output: C++ uses a new way to perform console I/O. Its major advantage over printf and getchar, is that it is both consistent and safer. printf("%s",i); /* but iis an integer */ is not detected as an error by most compilers. C++ instead uses the notion of streams manipulators overloading it overloads the two operators >> and << Input and Output

  11. C++ streams A stream is a sequence of bytes moving to/from a device or file.

  12. 159.234 Input and Output #include <iostream> ... cout << "Hello World“ << endl; writes "Hello World" on the console and then goes to the next line. cout << "i = " << i; //outputs the value of i For input: cin >> i; //The >> point the way the data is going. cin There is no need to use pointers! To get a complete line of text (the newline is read and discarded) cin.getline(s, max_no_of_chars);

  13. 159.234 To alter the appearance of output, we insert manipulatorsinto the stream, or call functions. Text Formatting #include <iostream> endl outputs a new line dec uses decimal values hex uses hexadecimal values width(int w) field width of next output fill(char c) fill character setf(flag) set special flags ios::left left align ios::right right align cout.fill('0'); cout.setf(ios::right); cout << hours << ":"; cout.width(2); cout << minutes << "."; cout.width(2); cout << seconds << endl; sprintf is still used to format a string before displaying it.

  14. 159.234 NEW SIMPLE TYPES C++ defines two new simple types: bool Boolean variables can represent either true or false. bool test; test = true; test = (x<5); bool, true and false are new keywords in C++ and cannot be used as identifiers. On output the values are shown as 0 (false) and 1 (true). wchar_t is a 'wide' character type is designed to allow alphabets with many characters (e.g. Japanese characters). C++

  15. 159.234 Enumerated types: Use this to create variables that can store days: day d1,d2; d1 = tue; d2 = d1; if (d2 == wed) { ... } #define is used to link names to constants. Use of the pre-processor is frowned on in C++. Enumerated types are one way of replacing it. enum day {sun,mon,tue,wed,thu,fri,sat}; defines a new type day. C++ Enumerated types allow the compiler to check the values associated with them. d1 = 1; // will produce a warning enum is implemented using integers.

  16. 159.234 Enumerated types: In the above example sun is represented by 0, mon by 1 etc. There is no easy way to print out enumerated types. switch (d1) { case sun: cout << "Sunday"; break; case mon: ... } Another way of avoiding the pre-processor is by using const: const int MAX = 4000; MAX is a non-changeable integer variable. You can initialise constants but not assign to them. C++

  17. 159.234 Values of expressions: We are familiar with the normal arithmetic operators: + - * / a + b is an expression and its value is the sum of the contents of the two variables. However, in C++, the following statements below: b = 2; c = 3; a = b + c; can also been written as: a = (b=2) + (c=3); DON’T do this. C++

  18. 159.234 Values of expressions: C++ However consider: a = b = c = 1; This sets several variables to one - and is used. The brackets have been omitted - if we insert them, we get: a = (b = (c = 1));

  19. 159.234 Comma operator: for (i=0;i<10;i++) { } In most uses of a for loop, the initialisation phase and the increment phase only have one expression. To initialise two variables we can use the comma operator for (i=0,j=0;i<10;i++,j++) { } The comma operator can be used anywhere: i = 0, j = 0; //this is OK. Its value is the value of the left-hand expression. k = (i=4),(j=5); k gets the value 4. But DON’T do this. C++

  20. 159.234 The conditional operator: A 'ternary' operator - it takes three arguments: expr1 ? expr2 : expr3 If expr1 is true then expr2 is evaluated otherwise expr3 is evaluated. It allows a shorthand form of an if statement: if (y < z) { x = y; } else { x = z; } can also be written: x = (y < z) ? y : z; C++

  21. 159.234 break break is used in a switch statement to stop execution falling through from one case to the next: switch (c) { case 'A': … do something break; case 'B': … etc break; } break can also be used in loops as well. while (true) { if (a == b) { break; } ... } break ends the inner-most loop that encloses it. C++

  22. 159.234 continue This is different from a while loop i = 0; while (i<total) { cin >> c; if (c > 'A') { continue; //i is not incremented } i++; } continue goes to the beginning of the loop. Inside a for loop the 'increment' expression is evaluated after a continue : for (i=0; i<total; i++) { cin >> c; if (c > 'A') { continue; // i is incremented } } C++

  23. 159.234 goto The use of goto is frowned upon! Try not to use it. It can be helpful in getting out of deeply nested loops, when a break isn't much use. Explicit jumps around pieces of code are used a lot in assembler programming. A label has the same syntax as an identifier, with a colon added at the end for (i=0; i<10; i++) { for (j=0; j<20; j++) { ... if (a[i][j] == 10) goto found; } } ... found: cout << "I found it! " << endl; Better: create a function and use return. C++

  24. 159.234 Declarations: C allows declarations at the start of a { } block. Variables only exists while the block is being executed. We normally declare variables at the start of a function, but this is also ok: int main () { int i; for (i=0;i<10;i++) { int temp; temp = i; } } temp only exists within the for loop. C++

  25. 159.234 DECLARATIONS C++ allows declarations anywhere. The variable exists from that point to the end of the enclosing block. for (int j=0;j<10;j++) { cout << j; int k = j; cout << k; } j exists while the loop is executing and maybe longer depending on compiler settings. k exists from its declaration to the end of the loop. for (int j=0;j<10;j++) { cout << j << k; // is an error! int k = j; cout << k; } C++

  26. C++ streams A stream is a sequence of bytes moving to/from a device or file.

  27. Input from Keyboard Store inithe value entered from the keyboard: cin >> i; By defaultcin skips all white spaces (blank, tab, newline). Get a complete line of text (the newline character is read & discarded): cin.getline(s, maxNoOfChars); s must be a string and maxNoOfCharsan integer (getline is a method of the cin object, set up for us by the system )

  28. Reading From File C-way #include <stdio.h> FILE *f; f = fopen(“data.txt”, “r”); fscanf(f,"%d %d",&n1,&n2); fclose(f); C++ way #include <fstream.h> ifstream inFile; inFile.open(“data.txt”); inFile >> n1 >> n2; inFile.close(();

  29. Sending Data To File #include <stdio.h> FILE *f; f = fopen(“result.txt”, “w”); ••• fprintf(f,"%d %d",n1,n2); fclose(f); C-way C++ way #include <fstream.h> ••• ofstream outFile; outFile.open(“result.txt”); outFile << n1 << n2; outFile.close();

  30. File Name Selected By User char* fileName; .. . cout << "Enter file name: "; cin >> fileName; ifstream inFile; inFile.open(fileName); if( !inFile){ cerr <<"No file-error here!"; exit(EXIT_FAILURE);//include <stdlib.h> } inFile.close(); cout <<"Done"; .. .

  31. Reading data ( assume char ch; char str[60]; )

  32. Output data

  33. Attention! 1. Check for the existence of the file. if(!myFile){//no file to work with cerr <<“Failed to find/create file<<endl; return 1; //notify the system something was wrong } This (common) trick works because myFile will have a NULL pointer if the file open operation failed. NULL is generally the same as zero so !NULL evaluates true. When the file is in a different directory, e.g “A:\mystuff\input.txt” We must use: ifstream myFile(“A:\\mystuff\\input.txt”);

  34. Attention! 2. Mixing numbers and strings when working with files needs careful consideration. while(inFile >> num1 >> num2 >> ch >> word) 23.4 56 M Demlow 12 4 A Smith Is OK for this inFile: 23.4 56 M Ann Demlow 12 4 A Smith But it does not work for

  35. #include <iostream> #include <fstream> using namespace std; int main(){ cout << “Hi there!" << endl; inti; while( cin >> i ){ cout << i << endl; } return 0; } Output is: Hi there! 1 1 2 2 Terminated with ^D or ^Z

  36. #include <iostream> #include <fstream> using namespace std; int main(){ ifstream myInputStream( "testinput.txt" ); if( !myInputStream ){ cerr << "error opening input file" << endl; exit(1); } ofstream myOutputStream( "testoutput.txt" ); if( !myOutputStream ){ cerr << "error opening output file" << endl; exit(1); } while( myInputStream >> i ){ myOutputStream << i * 10 << endl; } myInputStream.close(); myOutputStream.close(); return 0; } Input of: 1 2 3 4 5 6 7 8 9 0 Gives output file: 10 20 30 40 50 60 70 80 90 0

  37. memory ---- ----- ---- ifstream var Disk file >>… cin Keyboard Monitor cout cerr <<… ---- ----- ---- ofstream var Disk file Summary

  38. Exercise Write a complete program that will read the following data from a text file, then generate an output file. Example: Number of items 3 1 2.2 3 4.4 5.5 6.6 7 8.8 1.1 2.1 3.1 4.1 Store these items into an array of struct x1, y1, x2 ,y2 Use dynamic memory allocation for the array

  39. Exercise Use the following format for the output file. wBound.x1 = v1, wBound.y1 = v2, wBound.x2 = v3, wBound.y2 = v4 Where vi is a value read from the file Sample output file: out.txt wBound.x1 = 1, wBound.y1 = 2.2, wBound.x2 = 3, wBound.y2 = 4.4 wBound.x1 = 5.5, wBound.y1 = 6.6, wBound.x2 = 7, wBound.y2 = 8.8 wBound.x1 = 1.1, wBound.y1 = 2.1, wBound.x2 = 3.1, wBound.y2 = 4.1

  40. Summary File streams work like streams coming from/going to the keyboard (cin)/ screen (cout), except that the other end is a file instead of an input/output device. To usecin/cout, we must include<iostream> To useifstream/ofstream, we must include<fstream> • Next: • Formatting output, program structure, types in C++, enum, const. • Textbook p.30-34,37(const), 38, 383, browse p. 414-417

More Related