470 likes | 639 Vues
Objects, types, and values. Adapted from Bjarne Stroustrup www.stroustrup.com/Programming X. Zhang Fordham Univ. CISC1600, Spring 2012. /* This is a program that simply prints out Hello world to the terminal, and move cursor to next line By X. Zhang, last updated 1/30/2012
E N D
Objects, types, and values Adapted from BjarneStroustrup www.stroustrup.com/Programming X. Zhang Fordham Univ. CISC1600, Spring 2012
/* This is a program that simply prints out Hello world • to the terminal, and move cursor to next line • By X. Zhang, • last updated 1/30/2012 • */ • #include <iostream> //This is preprocessor directive • using namespace std; // In order to use cin, cout etc declared in std • int main() • { • cout <<"Hello world\n"; // send the string to the terminal window • // this is a blank line, added here for readability • return 0; //program exits, return 0 to indicate success • } Curly braces enclose the body of function Statement (end with ;) CS1, Spring 2012, Zhang
Cout statement cout <<"Hello world\n"; • cout: pronounced as see-out, stands for character output • Defined in iostream, a header file (a source code) that is part of C++ standard library • Represents the terminal window that the program is running from • << insertion operator: to insert (display) something in terminal window • Can display multiple values in single statement, e.g., • cout <<“Hello world, “ << “this is my first program!\n”; • cout <<“Hello world, “ << “this is my first program!\n”; One statement can be split into multiplie lines. CS1, Spring 2012, Zhang
Overview • Introduction • Strings and string I/O • Integers and integer I/O • Type of a variable decides what operations can be performed on it • Types and objects • C++ built-in types, user-defined types • literals • Simple arithmetic • More next week • Type safety CS1, Spring 2012, Zhang
Computation • Input: from keyboard, files, other input devices, other programs, other parts of a program • Computation – what our program will do with the input to produce the output. • Output: to screen, files, other output devices, other programs, other parts of a program Code, often messy, often a lot of code (input) data (output) data data Stroustrup/Programming
Computation (cont’d) • What are inputs, computation, and outputs of following program? • Hello world program • Editor • Windows Media Player • Calculator • Video game • We now extend hello world to take some input … CS1, Spring 2012, Zhang
Program structure 1 Read inputs 2 Computation 3 Write output 1 Read inputs 2 Computation 3 Write output 4 Go back to 1 Single batch of input Multiple batch of input CS1, Spring 2012, Zhang
Input and output // read first name: #include "std_lib_facilities.h" // our course header int main() { cout << "Please enter your first name (followed " << "by 'enter'):\n"; string first_name; cin >> first_name; cout << "Hello, " << first_name << '\n'; } //note how several values can be output by a single statement // a statement that introduces a variable is called a declaration // a variable holds a value of a specified type // the final return 0; is optional in main() // but you may need to include it to pacify your compiler CS1, Spring 2012, Zhang
Input and type • We read data/or input into a variable • Here, first_name • A variable has a type • Here, string • The type of a variable determines what operations we can do on it • Here, cin>>first_name; reads characters until a whitespace character is seen • White space: space, tab, newline, … CS1, Spring 2012, Zhang
String input // read first and second name: int main() { cout << "please enter your first and second names\n"; string first; string second; cin >> first >> second; // read two strings string name = first + ' ' + second; // concatenate strings // separated by a space cout << "Hello, "<< name << '\n'; } // I left out the #include "std_lib_facilities.h" to save space and // reduce distraction //Don't forget it in real code CS1, Spring 2012, Zhang
Integers // read name and age: int main() { cout << "please enter your first name and age\n"; string first_name; // string variable int age; // integer variable cin >> first_name >> age; // read cout << "Hello, " << first_name << " age " << age << '\n'; } CS1, Spring 2012, Zhang
Integers and Strings • Strings • cin >> reads (until whitespace) • cout << writes • + concatenates • += s adds the string s at end • ++ is an error • - is an error • … • Integers and floating point numbers • cin >> reads a number • cout << writes • + adds • += n increments by the int n • ++ increments by 1 • - subtracts • … • The type of a variable determines which operations are valid and what their meanings are for that type • (that's called "overloading" or "operator overloading") CS1, Spring 2012, Zhang
Overview • Introduction • Strings and string I/O • Integers and integer I/O • Type of a variable decides what operations can be performed on it • Types and objects • C++ built-in types, user-defined types • Variable declaration, literals • Simple arithmetic • More next week • Type safety CS1, Spring 2012, Zhang
Types • C++ provides a set of types • E.g. bool, char, int, double • Called “built-in types” • C++ programmers can define new types • Called “user-defined types” • We'll get to that eventually • C++ standard library provides a set of types • E.g. string, vector, complex • Technically, these are user-defined types • they are built using only facilities available to every user CS1, Spring 2012, Zhang
Builtin Types • Boolean type represents value of true or false • bool • ex: boolinvalidInput; // used to mark invalid input • Character type represents a single character, such as q, a, B, \n, (, … • char • Ex: char choice = ‘q’; • Integer types • int • short and long • Floating-point types • Double • and float CS1, Spring 2012, Zhang
Builtin Types • Boolean type represents value of true or false • bool • ex: boolinvalidInput; // used to mark invalid input • Character type represents a single character, such as q, a, B, \n, (, … • char • Ex: char choice = ‘q’; • Integer types represents a whole number • int, short and long • Floating-point types represents number with decimal points, such as 3.14 • double, and float CS1, Spring 2012, Zhang
Number types • Integer numbers (int) are whole numbers without a fractional part • Includes zero and negative numbers • Used for storing values that are conceptually whole numbers (e.g. pennies) • Process faster and require less storage space • Floating-point numbers (double) have decimal points CS1, Spring 2012, Zhang
Objects • An object is some memory that can hold a value of a given type • A variable is a named object; a constant is an object without a name, i.e., unaddressable • Each variable has name, type, value A declaration names an object int a = 7; char c = 'x'; string s = "qwerty"; a: 7 c: 'x' 6 s: "qwerty" Size of memory varies for objects of different types ! CS1, Spring 2012, Zhang
Names in C++ • Starts with a letter, contains letters, digits, and underscores (only) • x, number_of_elements, Fourier_transform, z2 • Not names: • 12x • time$to$market • main line • Do not start names with underscores: _foo • those are reserved for implementation and systems entities • Users can't define names that are taken as keywords (or reserved words) • E.g.: int, if,while, double, main, … CS1, Spring 2012, Zhang
Choose Meaningful Names • Abbreviations and acronyms can confuse people • mtbf, TLA, myw, nbv • Short names can be meaningful • when used conventionally: • x is a local variable • i is a loop index • Don't use overly long names • Ok: • partial_sumelement_countstaple_partition • Too long: • the_number_of_elementsremaining_free_slots_in_the_symbol_table CS1, Spring 2012, Zhang
Variable DECLARATION statement Syntax: type_namevariable_name; type_namevariable_name = initial_value; type_name variable_name1, variable_name2; Example: • double total; • int pennies = 8; // 8 is a literal constant • int pennies, nickels, dimes, quarters; Purpose: • Define a new variable of a particular type, and optionally supply an initial value. All statements end with ; CS1, Spring 2012, Zhang
Types and literals int pennies = 8; cout << “Hello world\n”; • Literal constants: values that occurs in the program • Literal, as we can only speak of it in terms of its value • Constant: its value cannot be changed • How to write literals? • Depending on the type of the literal • 8 is of type int, “Hello world\n” is of type string • More examples: • boolvalidInput = true; • bool continue = false; // reserved words • Character literals: 'a', 'x', '4', '\n', '$‘ • Integer literals: 0, 1, 123, -6, 0x34, 0xa3, 024 • Floating point literals: 1.2, 13.345, .3, -0.54, 1.2e3, . 3F, .3F • String literals: "asdf", "Howdy, all y'all!“ CS1, Spring 2012, Zhang
Overview • Introduction • Strings and string I/O • Integers and integer I/O • Type of a variable decides what operations can be performed on it • Types and objects • C++ built-in types, user-defined types • literals • Operations and Operators • Some examples • Type safety CS1, Spring 2012, Zhang
Operation on data • Once we have variables and constants, we can begin to operate with them. • C++ defines operators. • Operators in C++ are mostly made of signs that are not part of the alphabet but are available in all keyboards. • Shorter C++ code and more international CS1, Spring 2012, Zhang
Operators • Assignment (=) • The assignment operator assigns a value to a variable. • Arithmetic operators ( +, -, *, /, % ) • five arithmetical operations supported by the C++ language are • Addition: + • subtraction: - • Multiplication: * • Division: / • Modulo: %, gives remainder of a division of two values. a = 11 % 3; // a will contain the value of 2 CS1, Spring 2012, Zhang
Assignment and increment a: // changing the value of a variable int a = 7; // a variable of typeintcalled a // initialized to the integer value 7 a = 9; // assignment: now change a's value to 9 a = a+a; // assignment: now doublea'svalue a += 2; // increment a's value by 2 // a shorthand notation for a = a+2; ++a; // increment a's value (by 1) //shorthand notation for a = a+1; 7 9 18 20 21 CS1, Spring 2012, Zhang
Simple arithmetic // do a bit of very simple arithmetic: #include <math.h> int main() { cout << "please enter a floating-point number: "; // prompt for a number double n; // floating-point variable cin >> n; cout << "n == " << n << "\nn+1 == " << n+1 // '\n' means “a newline” << "\nthree times n == " << 3*n << "\ntwice n == " << n+n << "\nn squared == " << n*n << "\nhalf of n == " << n/2 << "\nsquare root of n == " << sqrt(n) // library function << endl; // another name for newline } If the user enters 25 upon the prompt, what’s the output? CS1, Spring 2012, Zhang
Overview • Introduction • Strings and string I/O • Integers and integer I/O • Type of a variable decides what operations can be performed on it • Types and objects • C++ built-in types, user-defined types • literals • Simple arithmetic • More next week • Type safety CS1, Spring 2012, Zhang
Types and Objects: a closer look • A type defines a set of possible values and a set of operations • A value is a sequence of bits in memory, interpreted according to its type • An object is a piece of memory that holds a value of a given type int a = 7; char c = 'x'; string s = "qwerty"; a: 7 c: x String object keeps the # of chars in the string, and the chars .. We will learn how to access each char, s[0], s[1], … 6 qwerty s: CS1, Spring 2012, Zhang
More example • What’s the difference? double x=12; string s2=“12”; • x stores the value of number 12 s2 stores the two characters, ‘1’,’2’ • applicable operations are different x: arithmetic operations, numerical comparison, s2: string concatenation, string comparison x: 12 s2: 2 12 CS1, Spring 2012, Zhang
value:a sequence of bits in memory • interpreted according to a type • E,g, int x=8; • is represented in memory as a seq. of binary digits (i.e., bits): • An integer value is stored using the value’s binary representation (demo this) • In everyday life, we use decimal representation x: 8 CS1, Spring 2012, Zhang
value:a sequence of bits in memory (cont’d) • interpreted according to a type • E,g, char x=‘8’; • is represented in memory as a seq. of binary digits (i.e., bits) • A char value is stored using char’s ASCII code x: ‘8’ CS1, Spring 2012, Zhang
ASCII Code CS1, Spring 2012, Zhang
A bit sequence (string) Interpretation • Given a bit string in memory • If it’s interpreted as integer, then it represents value 8 • 1*23=8 • If interpreted as char, there are two chars, a NULL char, and a BACKSPACE char CS1, Spring 2012, Zhang
A technical detail • In memory, everything is just bits; type is what gives meaning to the bits char c = 'a'; cout << c; // print the value of character variable c, which is a inti = c; cout << i; // print the integer value of the character c, which is 97 inti = c; • Assign a char value to a int type variable ?! • A safe type conversion ! Why? • Left-hand-side (LHS) • is an int type variable • Right-hand-side (RHS) is • a value of char type CS1, Spring 2012, Zhang
Sizeof operator Yields size of its operand with respect to size of type char. cout <<"sizeof bool is " << sizeof (bool) << "\n" <<"sizeof char is " << sizeof (char) << "\n" <<"sizeof int is " << sizeof (int) << "\n" <<"sizeof short is " << sizeof (short) << "\n" <<"sizeof long is " << sizeof (long) << "\n" <<"sizeof double is " << sizeof (double) << "\n" <<"sizeof float is " << sizeof (float) << "\n"; sizeof bool is 1 sizeof char is 1 sizeof int is 4 sizeof short is 2 sizeof long is 8 sizeof double is 8 sizeof float is 4 CS1, Spring 2012, Zhang
Char-to-int conversion char c = 'a'; cout << c; // print the value of character variable c, which is a inti = c; cout << i; // print the integer value of the character c, which is 97 • No information is lost in the conversion char c2=i; //c2 has same value as c • Can convert int back to char type, and get the original value • Safe conversion: • bool to char, int, double • char to int, double • int to double c: 01100001 0000000000000000000000001100001 i: CS1, Spring 2012, Zhang
Type safety • Type safety is extent to which a programming language discourages or prevents type errors. • Ideally, every object will be used only according to its type • A variable will be used only after it has been initialized • Only operations defined for the variable's declared type will be applied • Every operation defined for a variable leaves the variable with a valid value • E.g., double x; //x is not initialized, // memory contains random bit string • double y=x; //use uninitialized x CS1, Spring 2012, Zhang
#include <iostream> using namespace std; int main() { int pennies = 8; //what if change 8 to "eight"? int dimes = 4; int quarters = 3; double total = pennies * 0.01 + dimes * 0.10 + quarters * 0.25; // Total value of the coins cout << "Total value = " << total << "\n"; return 0; } Implicit type conversion int to double CS1, Spring 2012, Zhang
Type safety ENFORCEMENT • A language supports static type safety if • A program that violates type safety will not compile • Compiler reports every violation • “when you program, the compiler is your best friend” • A language supports dynamic type safety, if • a program that violates type safety it will be detected at run time • Some code (typically “ run-time system") detects every violation not found by compiler CS1, Spring 2012, Zhang
C++ Type safety • C++ is not (completely) statically type safe • No widely-used language is (completely) statically type safe • C++ is not (completely) dynamically type safe • Many languages are dynamically type safe • Being completely statically or dynamically type safe may interfere with the ability to express ideas and often makes generated code bigger and/or slower • A trade-off ! • Most of what you’ll be taught here is type safe • We’ll specifically mention anything that is not CS1, Spring 2012, Zhang
A type-safety violation(“implicit narrowing”) // Beware: C++ does not prevent you from trying to put a large value // into a small variable (though a compiler may warn) int main() { int a = 20000; char c = a; int b = c; if (a != b) // != means “not equal” cout << "oops!: " << a << "!=" << b << '\n'; else cout << "Wow! We have large characters\n"; } (demo2.cpp) Try it to see what value b gets on your machine, why? 20000 a ??? c: ?? b CS1, Spring 2012, Zhang
“narrowing” conversion int main() { double d =0; while (cin>>d) { // repeat the statements below // as long as we type in numbers int i = d; // try to squeeze a double into an int char c = i; // try to squeeze an int into a char int i2 = c; // get the integer value of the character cout << "d==" << d // the original double << " i=="<< i // converted to int << " i2==" << i2 // int value of char << " char(" << c << ")\n"; // the char } Demo: TestCode/narrow CS1, Spring 2012, Zhang
A type-safety violation (Uninitialized variables) // Beware: C++ does not prevent you from trying to use a variable // before you have initialized it (though a compiler typically warns) int main() { int x; // x gets a “random” initial value char c; // c gets a “random” initial value double d; // d gets a “random” initial value //– not every bit pattern is a valid floating-point value double dd = d; // potential error: some implementations //can’t copy invalid floating-point values cout << " x: " << x << " c: " << c << " d: " << d << '\n'; } • Always initialize your variables – beware: “debug mode” may initialize • valid exception to this rule: input variable CS1, Spring 2012, Zhang
A bit of philosophy • One of the ways that programming resembles other kinds of engineering is that it involves tradeoffs. • You must have ideals, but they often conflict, so you must decide what really matters for a given program. • Type safety • Run-time performance • Ability to run on a given platform • Ability to run on multiple platforms with same results • Compatibility with other code and systems • Ease of construction • Ease of maintenance • Don't skimp on correctness or testing • By default, aim for type safety and portability CS1, Spring 2012, Zhang
Summary • Introduction • Strings and string I/O • Integers and integer I/O • Type of a variable decides what operations can be performed on it • Types and objects • C++ built-in types, user-defined types • literals • Simple arithmetic • More next week • Type safety CS1, Spring 2012, Zhang
The next lecture • Copy sample code and try them out yourself • Read chapter 4, email me questions • Will talk about expressions, statements, debugging, simple error handling, and simple rules for program construction CS1, Spring 2012, Zhang