1.07k likes | 1.27k Views
CSCE 3110 Data Structures & Algorithms . C++ warm-up. History and overview Basic features Parameter passing Classes Inheritance and virtual Header file IO Memory Management Big three: destructor, copy constructor, and assignment operator Const Template. History of C++.
E N D
CSCE 3110Data Structures &Algorithms C++ warm-up
History and overview • Basic features • Parameter passing • Classes • Inheritance and virtual • Header file • IO • Memory Management • Big three: destructor, copy constructor, and assignment operator • Const • Template
History of C++ • 1972: C language developed at Bell Labs • Dennis Ritchie wrote C for Unix OS • Needed C for work with Unix • late 70s: C becomes popular for OS development by many vendors • Many variants of the language developed • ANSI standard C in 1987-89
History of C++ (continued) • early 80s: Bjarne Stroustrup adds OO features to C creating C++ • 90s: continued evolution of the language and its applications • preferred language for OS and low level programming • popular language for application development • low level control and high level power
Conceptually what is C++ • Alternatives: • is it C, with lots more options and features? • is it an OO programming language with C as its core? • is it a development environment? • On most systems it is a development environment, language, and library, used for both procedural and object oriented programming, that can be customized and extended as desired
Versions of C++ • ANSI C++ • Microsoft C++ (MS Visual C++ 6.0) • Other vendors: Borland, Symantec, Turbo, … • Many older versions (almost annual) including different version of C too • Many vendor specific versions • Many platform specific versions • For this class: Unix / Linux based versions • g++
Characteristics of C++ as a Computer Language • Procedural • Object Oriented • Extensible • ...
Other OO Languages • Smalltalk • pure OO language developed at PARC • Java • built on C/C++ • objects and data types • Eifel and others
What you can do with C++ • Apps (standalone, Web apps, components) • Active desktop (Dynamic HTML, incl Web) • Create graphical apps • Data access (e-mail, files, ODBC) • Integrate components w/ other languages
Disadvantages of C++ • Tends to be one of the less portable languages • Complicated? • 40 operators, intricate precedence, pointers, etc. • can control everything • many exceptions and special cases • tremendous libraries both standard, vendor specific, and available for purchase, but all are intricate • Aspects above can result in high maintenance costs
Advantages of C++ • Available on most machines • Can get good performance • Can get small size • Can manage memory effectively • Can control everything • Good supply of programmers • Suitable for almost any type of program (from systems programs to applications)
History and overview • Basic features • Parameter passing • Classes • Inheritance and virtual • Header file • IO • Memory Management • Big three: destructore, copy constructor, and assignment operator • Const • Template
Primitive Types • bool true or false (only C++) • char 8/16-bit • short 16-bit signed integer • int 32-bit signed integer • unsigned 32-bit unsigned integer • long 32 / 64-bit signed integer • float 32-bit floating point • double 64-bit floating point
Operators and Precedence • [] . • to access arrays elements / to access object methods and fields • expr++ expr-- ++expr --expr ! • new (type)expr • * / % • + - • << >> (integers only) • < > >= <= • == != • &
Operators and Precedence • ^ • | • && (booleans only) • || (booleans only) • ?: • = += -= *= …. • C++ allows operator overloading
Precedence Example • What is: 5 + 21 / 4 % 3 • = 5 + (21 / 4) % 3 • = 5 + ( 5 % 3) • = 5 + 2 • = 7
Explicit Casting • (type) expression • Possible among all integer and float types • Possible among some class references • E.g. int i = (int) ( (double)5 / (double)3 )
Implicit Casting • Applied automatically provided there is no loss of precision • float double • int double • Example • int iresult, i=3; • double dresult, d=3.2; • dresult = i/d => implicit casting dresult=0.9375 • iresult = i/d => error! Why? Loss in precision, needs explicit casting
Control Flow if (boolean) statement; else if(boolean) statement2; else statement3; Booleans only, not integers! • if (i > 0) correct • if (i = 2) correct / incorrect ?
Switch / case • switch (controlVar) { case 'a' : statement-1 break; case 'b' : statement-2 break; default : statement-3 break; } • Do not forget the break command to avoid surprise result!
Loops while(<boolean>) statement; do statement; while(<boolean>) for(init-expr; <boolean>; incr-expr) statement;
Loop Refresher • Which loops must execute their statements at least once? • Which loops can choose to never execute their statements? • Which value of the boolean indicates to do the statements again?
Some Conventions for Variable Names • Use letters and numbers • Do not use special characters including spaces, dots, underlines, pound signs, etc. • The first letter will be lower case • Use variable names that are meaningful (except for occasional counters that we might call i, j, x, etc.) • You can concatenate words, and capitalize each after the first, e.g., bankBal, thisAcctNum, totAmt • If you abbreviate, be consistent. For example do not use both bankBal and totalBalance as variable names.
Some Conventions for Struct and Class Names • In creating names of structs and classes, apply the same rules as for variable names, except the first character will be upper case • Example: • an object's name: myCar • the struct or class name: Car • Another Example: aPerson and Person
Overview • History and overview • Basic features • Parameter passing • Classes • Inheritance and virtual • Header file • IO • Memory Management • Big three: destructore, copy constructor, and assignment operator • Const • Template
Passing Parameters • C++ allows for three different ways of passing parameters: • Pass “by value” • E.g. foo (int n) • Appropriate for small objects (usually primitive types) that should not be altered by the function call • Pass “by constant reference” • E.g. foo(const T& myT) • Appropriate for large objects that should not be altered by the function call • Pass “by reference” • E.g. foo(bool & errFlag) • Appropriate for small objects that can be altered by the function call • Array types are always passed “by reference”
Passing by value void square(int i) { i = i*i; } int main() { int i = 5; square(i); cout << i << endl; }
Passing by reference void square(int& i) { i = i*i; } int main() { int i = 5; square(i); cout << i << endl; }
Passing by constant reference void square(const int& i) { i = i*i; } int main() { int i = 5; square(i); cout << i << endl; } Wont work, why?
Passing by constant reference int square(const int& i) { return i*i; } int main() { int i = 5; cout << square(i) << endl; } Will t his work?
What is a reference? An alias – another name for an object. int x = 5; int &y = x; // y is a // reference to x y = 10; What happened to x? What happened to y? – y is x.
Why are they useful? When passing argument of large size (class type), can save space Sometimes need to change a value of an argument Can be used to return more than one value (pass multiple parameters by reference)
Outline • History and overview • Basic features • Parameter passing • Classes • Inheritance and virtual • Header file • IO • Memory Management • Big three: destructore, copy constructor, and assignment operator • Const • Template
Classes • Provide a mechanism for defining classes of objects. • We can define the class of all computers to have certain characteristics. • An instance of a computer is your home PC. • Classes contain member variables and member functions.
Classes in C++:Why Create Classes / Objects? • Keeps all related info (i.e., data) together • Refer to all the related info by one name • Protect the information • Hide methods that use or change the info • Keep methods together with their related info
Example of Benefits of Creating an Object • Keeps all related info (i.e., data) together Person thisPerson; Person thisPerson = new Person ("Bill", "Clinton", 52); • Refer to all the related info by one name thisPerson • Protect the information lastName = "Dole";//normally data members are private, and member functions are public
Classes and Objects class Mammals inherits inherits Humans class Tigers class instance-of instance-of Hank Peggy Tony
Example of a Simple Class class Change { private: int quarters; int dimes; public: int getQuarters() {return quarters;} int getDimes() {return dimes;} void setQuarters(int aQuarters) {quarters = aQuarters;} …... void printChange() {cout << "\nQuarters: " << quarters << " Dimes: " << dimes << endl; } };
More Class Example class human { // this data is private to instances of the class int height; char name[]; int weight; public: void setHeight(int heightValue); int getHeight(); };
Function Definitions void human::setHeight(int heightValue) { if (heightValue > 0) height = heightValue; else height = 0; } int human::getHeight() { return(height); }
Example Output // first we define the variables. int height = 72; int result = 0; human hank; //set our human’s height hank.setHeight(height); //get his height result = hank.getHeight(); cout << “Hank is = “ << result << “inches tall” << endl; Hank is 72 inches tall
Instantiating an Object • The class definition does not create any objects • Instantiating and constructing are equivalent words for building a new object based on the model (i.e., template) of the class • Instantiating is done just like declaring a variable of a built in data type • Instantiating is done by a constructor (sometimes called a constructor method) • If the "class provider" does not provide a constructor, then the C++ compiler provides a default one automatically • The default constructor does not provide values to the data members (i.e. the instance variables)
Instantiating an Object (more) • When the object is instantiated, memory is allocated • Example of instantiation (implicit call of constructor) Car myCar; Elephant oneElephant, twoElephant; • No initialization takes place • Each object has its own memory allocation • oneElephant and twoElephant are separate objects in different locations in memory • Each is addressed individually by name or location • Each data member is addressed individually using the object name and the data member name, for example: oneElephant.age twoElephant.name
Referencing an Object • Each object has a name (or a location) which is assigned when the object is instantiated • private data members are accessible only within the class • since most data members are private, that means that these data items are accessed generally by means of member functions • myElephant.age = 72; //won't work, assuming age //is declared as private • myElephant.setAge(72); // will work
Outline • History and overview • Basic features • Parameter passing • Classes • Inheritance and virtual • Header file • IO • Memory Management • Big three: destructore, copy constructor, and assignment operator • Const • Template
Inheritance • The power of object-oriented languages • Enables reuse of fields/methods • All parent fields included in child instantiation • Protected and public fields and methods directly accessible to child • Parent methods may be overridden • New fields and methods may be added to the child • Multiple inheritance
Inheritance (cont’d) class classname: public parentname { private: ….; public: ….; //access to parent methods through // parentname::methodname … }
Outline • History and overview • Basic features • Parameter passing • Classes • Inheritance and virtual • Header file • IO • Memory Management • Big three: destructore, copy constructor, and assignment operator • Const • Template
Header file • For complex classes, the member functions are declared in a header file and the member functions are implemented in a separate file. • This allows people to look at the class definitions, and their member functions separately • The header file needs to be included in your program when you use the classes defined in the head file