C++ Mini-Course. Part 1: Mechanics Part 2: Basics Part 3: References Part 4: Const Part 5: Inheritance Part 6: Libraries Part 7: Conclusion. C Rulez!

Similar documents
C++ Mini-Course. Part 1: Mechanics Part 2: Basics Part 3: References Part 4: Const Part 5: Inheritance Part 6: Libraries Part 7: Conclusion. C Rulez!

CSE 374 Programming Concepts & Tools. Hal Perkins Fall 2015 Lecture 19 Introduction to C++

CSE 303: Concepts and Tools for Software Development

CSE 374 Programming Concepts & Tools. Hal Perkins Spring 2010

Short Notes of CS201

CS201 - Introduction to Programming Glossary By

Fast Introduction to Object Oriented Programming and C++

CSE 333. Lecture 11 - constructor insanity. Hal Perkins Paul G. Allen School of Computer Science & Engineering University of Washington

Introduction to C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts

PIC 10A Objects/Classes

Inheritance, and Polymorphism.

Announcements. CSCI 334: Principles of Programming Languages. Lecture 18: C/C++ Announcements. Announcements. Instructor: Dan Barowy

POLYMORPHISM 2 PART. Shared Interface. Discussions. Abstract Base Classes. Abstract Base Classes and Pure Virtual Methods EXAMPLE

POLYMORPHISM 2 PART Abstract Classes Static and Dynamic Casting Common Programming Errors

Written by John Bell for CS 342, Spring 2018

the gamedesigninitiative at cornell university Lecture 7 C++ Overview

Chapter 2. Procedural Programming

Introducing C++ to Java Programmers

12/2/2009. The plan. References. References vs. pointers. Reference parameters. const and references. HW7 is out; new PM due date Finish last lecture

CSE 333. Lecture 9 - intro to C++ Hal Perkins Department of Computer Science & Engineering University of Washington

pointers & references

CSE 333. Lecture 10 - references, const, classes. Hal Perkins Paul G. Allen School of Computer Science & Engineering University of Washington

CS

CS3157: Advanced Programming. Outline

Intermediate Programming, Spring 2017*

C++ Primer for CS175

EL2310 Scientific Programming

CE221 Programming in C++ Part 1 Introduction

C++ Class Details, Heap

Interview Questions of C++

CS 376b Computer Vision

CS 11 C++ track: lecture 1

C++_ MARKS 40 MIN

Learning Objectives. C++ For Artists 2003 Rick Miller All Rights Reserved xli

CS 251 INTERMEDIATE SOFTWARE DESIGN SPRING C ++ Basics Review part 2 Auto pointer, templates, STL algorithms

1/29/2011 AUTO POINTER (AUTO_PTR) INTERMEDIATE SOFTWARE DESIGN SPRING delete ptr might not happen memory leak!

explicit class and default definitions revision of SC22/WG21/N1582 =

Note 12/1/ Review of Inheritance Practice: Please write down 10 most important facts you know about inheritance...

Paytm Programming Sample paper: 1) A copy constructor is called. a. when an object is returned by value

CS11 Intro C++ Spring 2018 Lecture 1

Lecture 8: Object-Oriented Programming (OOP) EE3490E: Programming S1 2017/2018 Dr. Đào Trung Kiên Hanoi Univ. of Science and Technology

Classes, Constructors, etc., in C++

Lesson 13 - Vectors Dynamic Data Storage

CSE 333 Lecture 9 - intro to C++

Homework 6. Yuji Shimojo CMSC 330. Instructor: Prof. Reginald Y. Haseltine

Introduction to C++ Introduction to C++ 1

G52CPP C++ Programming Lecture 9

CS250 Final Review Questions

CMSC 202 Section 010x Spring Justin Martineau, Tuesday 11:30am

Extending Classes (contd.) (Chapter 15) Questions:

C++ Constructor Insanity

Assumptions. History

C++ (Non for C Programmer) (BT307) 40 Hours

CS201 Some Important Definitions

C++ Inheritance and Encapsulation

Software Engineering /48

Polymorphism Part 1 1

Object-Oriented Programming

Object Reference and Memory Allocation. Questions:

Intro to OOP Visibility/protection levels and constructors Friend, convert constructor, destructor Operator overloading a<=b a.

C Review. MaxMSP Developers Workshop Summer 2009 CNMAT

OBJ. ORI.& MULT. PROG., M.C.Q. BANK, FOR UNIT -2, SECOND YEAR COMP. ENGG. SEM-4, 2012 PATTERN, U.O.P. UNIT-2

OBJECT ORIENTED PROGRAMMING USING C++ CSCI Object Oriented Analysis and Design By Manali Torpe

OOPS Viva Questions. Object is termed as an instance of a class, and it has its own state, behavior and identity.

Programming, numerics and optimization

C++ PROGRAMMING LANGUAGE: DYNAMIC MEMORY ALLOCATION AND EXCEPTION IN C++. CAAM 519, CHAPTER 15

377 Student Guide to C++

G52CPP C++ Programming Lecture 13

(5-1) Object-Oriented Programming (OOP) and C++ Instructor - Andrew S. O Fallon CptS 122 (February 4, 2019) Washington State University

Absolute C++ Walter Savitch

Programming C++ Lecture 2. Howest, Fall 2014 Instructor: Dr. Jennifer B. Sartor

Inheritance. OOP components. Another Example. Is a Vs Has a. Virtual Destructor rule. Virtual Functions 4/13/2017

Outline. 1 Function calls and parameter passing. 2 Pointers, arrays, and references. 5 Declarations, scope, and lifetimes 6 I/O

EL2310 Scientific Programming

C++ Programming: Polymorphism

Introduction to C++ Part II. Søren Debois. Department of Theoretical Computer Science IT University of Copenhagen. September 12th, 2005

Suppose that you want to use two libraries with a bunch of useful classes and functions, but some names collide:

VIRTUAL FUNCTIONS Chapter 10

Reliable C++ development - session 1: From C to C++ (and some C++ features)

CS3215. Outline: 1. Introduction 2. C++ language features 3. C++ program organization

The Foundation of C++: The C Subset An Overview of C p. 3 The Origins and History of C p. 4 C Is a Middle-Level Language p. 5 C Is a Structured

System Programming. Practical Session 9. C++ classes

SFU CMPT Topic: Classes

Evolution of Programming Languages

G52CPP C++ Programming Lecture 14. Dr Jason Atkin

Motivation was to facilitate development of systems software, especially OS development.

An Introduction to C++

04-24/26 Discussion Notes

CS 162, Lecture 25: Exam II Review. 30 May 2018

Introduction to C++ Systems Programming

Modern C++ for Computer Vision and Image Processing. Igor Bogoslavskyi

CSCI 102L - Data Structures Midterm Exam #1 Fall 2011

Where do we go from here?

Engineering Tools III: OOP in C++

EL2310 Scientific Programming

Lecture 10: building large projects, beginning C++, C++ and structs

C++ Programming Lecture 4 Software Engineering Group

Object-oriented Programming. Object-oriented Programming

Chapter 1: Object-Oriented Programming Using C++

EL2310 Scientific Programming

Transcription:

C++ Mini-Course Part 1: Mechanics Part 2: Basics Part 3: References Part 4: Const Part 5: Inheritance Part 6: Libraries Part 7: Conclusion C Rulez! C++ Rulez!

C++ Mini-Course Part 1: Mechanics

C++ is a superset of C New Features include Classes (Object Oriented) Templates (Standard Template Library) Operator Overloading Slightly cleaner memory operations

Some C++ code Segment.h #ifndef SEGMENT_HEADER #define SEGMENT_HEADER class Point; class Segment { public: Segment(); virtual ~Segment(); private: Point *m_p0, *m_p1; }; Segment.cpp #include Segment.h #include Point.h Segment::Segment() { m_p0 = new Point(0, 0); m_p1 = new Point(1, 1); } Segment::~Segment() { delete m_p0; delete m_p1; } #endif // SEGMENT_HEADER

#include #include Segment.h Insert header file at this point. #include <iostream> Use library header.

Header Guards #ifndef SEGMENT_HEADER #define SEGMENT_HEADER // contents of Segment.h //... #endif To ensure it is safe to include a file more than once.

Header Guards #ifndef SEGMENT_HEADER #define SEGMENT_HEADER If this variable is not defined // contents of segment.h //... Define it. #endif To ensure it is safe to include a file more than once. End of guarded area.

Circular Includes gui.h #include controller.h // define gui //... controller.h #include gui.h What s wrong with this picture? How do we fix it? class Controller { //... private: Gui* mygui; //... };

Forward Declarations gui.h //Forward Declaration class Controller; // define gui //... controller.h //Forward declaration class Gui; class Controller { //... private: Gui* mygui; //... }; In header files, only include what you must. If only pointers to a class are used, use forward declarations.

Compilation Preprocessor Inlines #includes etc. Compiler Translates to machine code Associates calls with functions Object files Executable Linker Associates functions with definitions External Libraries, libc.so, libcs123.so

OK, OK. How do I run my Program? > make And if all goes well >./myprog

C++ Mini-Course Part 2: Basics

What is a pointer? int x = 10; int *p; p p = &x; 10 x p gets the address of x in memory.

What is a pointer? int x = 10; int *p; p p = &x; *p = 20; 20 x *p is the value at the address p.

What is a pointer? int x = 10; int *p = NULL; p = &x; *p = 20; Declares a pointer to an integer & is address operator gets address of x * dereference operator gets value at p

Allocating memory using new Point *p = new Point(5, 5); new can be thought of a function with slightly strange syntax new allocates space to hold the object. new calls the object s constructor. new returns a pointer to that object.

Deallocating memory using delete // allocate memory Point *p = new Point(5, 5);... // free the memory delete p; For every call to new, there must be exactly one call to delete.

Using new with arrays int x = 10; int* nums1 = new int[10]; // ok int* nums2 = new int[x]; // ok Initializes an array of 10 integers on the heap. C++ equivalent of the following C code int* nums = (int*)malloc(x * sizeof(int));

Using new with multidimensional arrays int x = 3, y = 4; int** nums3 = new int[x][4];// ok int** nums4 = new int[x][y];// BAD! Initializes a multidimensional array Only the first dimension can be a variable. The rest must be constants. Use single dimension arrays to fake multidimensional ones

Using delete on arrays // allocate memory int* nums1 = new int[10]; int* nums3 = new int[x][4][5];... // free the memory delete[] nums1; delete[] nums3; Have to use delete[].

Destructors delete calls the object s destructor. delete frees space occupied by the object. A destructor cleans up after the object. Releases resources such as memory.

Destructors an Example class Segment { public: Segment(); virtual ~Segment(); private: Point *m_p0, *m_p1; };

Destructors an Example Segment::Segment() { m_p0 = new Point(0, 0); m_p1 = new Point(1, 1); } Segment::~Segment() { if (m_p0) delete m_p0; if (m_p1) delete m_p1; }

New vs Malloc Never mix new/delete with malloc/free Malloc Standard C Function Used sparingly in C++; used frequently in C Used for allocating chunks of memory of a given size without respect to what will be stored in that memory Returns void* and requires explicit casting Returns NULL when there is not enough memory Every malloc() should be matched with a free() New Operator (like ==, +=, etc.) Only in C++ Used to allocate instances of classes / structs / arrays and will invoke an object s constructor Returns the proper type Throws an exception when there is not enough memory Every new/new[] should be matched with a delete/delete[]

Classes vs Structs Default access specifier for classes is private; for structs it is public Except for this difference, structs are functionally the same as classes, but the two are typically used differently: structs should be thought of as lightweight classes that contain mostly data and possibly convenience methods to manipulate that data and are hardly ever used polymorphically struct Point { int x; int y; }; // convenience constructor Point(int a, int b) : x(a), y(b) { } // @returns distance to another point double distance(const Point &pnt) { int dx = m_x pnt.x; int dy = m_y pnt.y; return math.sqrt(dx*dx + dy*dy); } class Segment { public: Segment(); virtual ~Segment(); }; void setpoints(int x0, int y0, int x1, int y1); protected: Point *m_p0, *m_p1; void Segment::setPoints(int x0, int y0, int x1, int y1) { m_p0 = new Point(x0, y0); m_p1 = new Point(x1, y1); }

Syntactic Sugar -> Point *p = new Point(5, 5); // Access a member function: (*p).move(10, 10); // Or more simply: p->move(10, 10);

Stack vs. Heap On the Heap / Dynamic allocation drawstuff() { } Point *p = new Point(); p->move(10,10); //... On the Stack / Automatic allocation drawstuff() { Point p(); p.move(5,5); //... } What happens when p goes out of scope?

Summary with Header File header file begin header guard forward declaration class declaration constructor destructor member variables need semi-colon end header guard Segment.h #ifndef SEGMENT_HEADER #define SEGMENT_HEADER class Point; class Segment { public: Segment(); virtual ~Segment(); protected: Point *m_p0, *m_p1; }; #endif // SEGMENT_HEADER

C++ Mini-Course Part 3: References

Passing by value void Math::square(int i) { i = i*i; } int main() { int i = 5; Math::square(i); cout << i << endl; }

Passing by reference void Math::square(int &i) { i = i*i; } int main() { int i = 5; Math::square(i); cout << i << endl; }

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?

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? Unless you know what you are doing, do not pass objects by value; either use a pointer or a reference. Some people find it easier to deal with references rather then pointers, but in the end there is really only a syntactic difference (neither of them pass by value). Can be used to return more than one value (pass multiple parameters by reference)

How are references different from Pointers? Reference int &a; int a = 10; int b = 20; int &c = a; c = b; Pointer int *a; int a = 10; int b = 20; int *c = &a; c = &b;

C++ Mini-Course Part 4: const

Introducing: const void Math::printSquare(const int &i){ i = i*i; Won t compile. cout << i << endl; } int main() { int i = 5; Math::printSquare(i); Math::printCube(i); }

Can also pass pointers to const void Math::printSquare(const int *pi) { *pi = (*pi) * (*pi); cout << pi << endl; } int main() { int i = 5; Math::printSquare(&i); Math::printCube(&i); } Still won t compile.

Declaring things const const River nile; const River* nilepc; River* const nilecp; const River* const nilecpc

Read pointer declarations right to left // A const River const River nile; // A pointer to a const River const River* nilepc; // A const pointer to a River River* const nilecp; // A const pointer to a const River const River* const nilecpc

Let s Try References River nile; const River &nilec = nile; // Will this work? River &nile1 = nilec;

How does const work here? void Math::printSquares(const int &j, int &k) { k = k*k; // Does this compile? cout << j*j <<, << k << endl; } int main() { int i = 5; Math::printSquares(i, i); }

Returning const references is OK class Point { public: const double & Point::getX() const { return m_x; } const double &getx() const; const double &gety() const; void move(double dx, double dy); }; protected: double m_x, m_y; Function won t change *this.

C++ Mini-Course Part 5: Inheritance

How does inheritance work? must include parent header file DottedSegment publicly inherits from Segment #include Segment.h class DottedSegment : public Segment { // DottedSegment declaration };

virtual In Java every method invocation is dynamically bound, meaning for every method invocation the program checks if a sub-class has overridden the method. You can disable this (somewhat) by using the keyword final in Java In C++ you have to declare the method virtual if you want this functionality. (So, virtual is the same thing as not final ) Just like you rarely say things are final in Java, you should rarely not say things are virtual in C++

pure virtual functions In Java, the abstract keyword means the function is undefined in the superclass. In C++, we use pure virtual functions: virtual int mustredfineme(char *str) = 0; This function must be implemented in a subclass.

Resolving functions In Java: In C++: // Overriding methods public void overloaded(){ println( woohoo ); super.overloaded(); } // Overriding methods void Subclass::overloaded(){ cout<< woohoo <<endl; Superclass::overloaded(); } //constructor public Subclass(){ super(); } //constructor public Subclass() : Superclass() { }

virtual Basic advice: for now make every method virtual except the constructor Make you declare your destructors virtual; if you do not declare a destructor a nonvirtual one will be defined for you Segment(); virtual ~Segment(); this is important

C++ Mini-Course Part 6: Libraries

Namespaces Namespaces are kind of like packages in Java Reduces naming conflicts Most standard C++ routines and classes and under the std namespace Any standard C routines (malloc, printf, etc.) are defined in the global namespace because C doesn t have namespaces

using namespace #include <iostream>... std::string question = How do I prevent RSI? ; std::cout << question << std::endl; using namespace std; string answer = Type less. ; cout << answer << endl; Bad practice to do in header files!

STL Standard Template Library Contains well-written, templated implementations of most data structures and algorithms Templates are similar to generics in Java Allows you to easily store anything without writing a container yourself Will give you the most hideous compile errors ever if you use them even slightly incorrectly!

STL example #include <vector> using namespace std; typedef vector<point> PointVector; typedef PointVector::iterator PointVectorIter; PointVector v; v.push_back(point(3, 5)); PointVectorIter iter; for(iter = v.begin(); iter!= v.end(); ++iter){ Point &curpoint = *iter; }

C++ Mini-Course Part 7: Conclusion

Other Resources The Java To C++ tutorial on the website is probably your best source of information The big thick book by Stroustrop in the back of the Sun Lab is the ultimate C++ reference A CS 123 TA, or specifically your mentor TA if you have been assigned one

Question and Answer Session