Download presentation
Presentation is loading. Please wait.
Published byElvis Gernert Modified over 3 years ago
1
Object-Oriented programming in C++ Classes as units of encapsulation Information Hiding Inheritance polymorphism and dynamic dispatching Storage management multiple inheritance
2
Ancestry Basis is C language: low-level constructs for systems programming, compact syntax Major innovation: classes, inspired by Simula. ◦ In Simula classes are objects with state and independent thread of execution. Syntactic innovation: operator overloading Later addition : templates Latest addition: a model of concurrency
3
Classes Encapsulation of type and related operations. Provides information hiding. Operations “belong” to the class class point { double x, y; // private data members public: point (int x0, int y0); // public methods point () { x = 0; y = 0;}; /// a constructor void move (int dx, int dy); // formal names optional void rotate (double alpha); int distance (point p); }
4
A class is a type : objects are instances point p1 (10, 20); // call constructor with given arguments point p2; // call default constructor Methods are functions with an implicit argument p1.move (1, -1); // special syntax to indicate object // in other languages might write move (p1, 1, -1) // special syntax inspired by message-passing metaphor: // objects are autonomous entities that exchange messages.
5
Implementing methods No equivalent of a package body: each method can be defined separately. Proper style is a separate file for all method bodies. void point::rotate (double alpha) { x = x * cos (alpha) - y * sin (alpha); y = y * cos (alpha) + x * cos (alpha); }; // x and y are the data members of the object on which the // method is being called. // if method is defined in class declaration, it is inlined.
6
Constructors One of the best innovations of C++ special method (s) invoked automatically when an object of the class is declared point (int x1, int x2); point (); point (double alpha; double r); point p1 (10,10), p2; p3 (pi / 4, 2.5); Name of method is name of class Declaration has no return type (would be redundant) Long form: point (int x1, int x2) {x = x1; y = x2} Syntactic sugar: point (int x1, int x2) :x(x1), y(x2)
7
The target of an operation The implicit parameter in a method call can be retrieved through this: class Collection { Collection& insert (thing x) { // return reference … modify data structure return *this; // to modified object }; my_collection.insert (x1).insert (x2);
8
Static members Need to have computable attributes for class itself, independent of specific object; e.g. number of objects created. Static qualifier indicates that entity is unique for the class static int num_objects = 0; point ( ) { num_objects++;}; // ditto for other constructors Can access static data using class name or object name: if (point.num_objects != p1.num_objects) error ( );
9
Classes and private types If all data members are private, class is identical to a private type: only methods are visible, including assignment. A struct is a class with all public members How much to reveal is up to programmer define functions to retrieve (not modify) private data int xcoord () { return x;}; int ycoord () { return y;}; p2.x = 15; // error, data member x is private
10
Destructors If constructor allocates dynamic storage, need to reclaim it class stack { int* contents; int sz; public: stack (int size) { contents = new int [ sz = size];}; void push ( ); int pop ( ); int size ( ) { return sz;}; } stack my_stack (100); // allocate storage dynamically // when is my_stack.contents released?
11
If constructor uses resources, class needs a destructor User cannot deallocate data because data member is private: system must do it ~stack ( ) {delete[ ] contents;}; inventive syntax: negation of constructor Called automatically when object goes out of scope Almost never called explicitly
12
Copy and assignment point p3 (10,20); point p5 = p3; // componentwise copy This can lead to unwanted sharing: stack stack1 (200); stack stack2 = stack1; // stack1.contents shared stack2.push (15); // stack1 is modified Need to redefine assignment and copy
13
Copy constructor stack (const stack& s) { // reference to existing object contents = new int [ sz = s.size( )]; for (int k = 0; k
14
Redefining assignment assignment can also be redefined to avoid unwanted sharing operator returns a reference, so it can be used efficiently in chained assignments: one = two = three; stack & operator= (const stack& s) { if (this != &s) { // beware of self-assignment delete [ ] contents; // discard old value contents = new int [sz = s.size ( )]; for (int k = 0; k
15
Anomalies An array whose component type is a class can only be declared if there is a parameterless constructor for the class. There is no way to pass parameters to the constructor. polygon point [10]; // ok turing stack [2]; // illegal
16
Operator Overloading: indexing Useful to create range-checked structures: class four_vect { double stor[4]; // private member, actual contents of vector. … double& operator[ ] (int j) { if (j 3) throw index_error; // defined elsewhere return stor[j]; }; Note: return type is a reference, so can be used on l.h.s
17
Extending the meaning of subscripting An associative array: class Assoc { // a map from strings to numbers struct Pair { // an inner class char* name; double val; Pair (char* n = “”, double v = 0) : name (n), val (v) { }; }; pair * contents; // Assoc is a set of pairs public: Assoc ( ) { }; // default constructor double& operator[ ] (const char *); // map string => number };
Similar presentations
© 2018 SlidePlayer.com Inc.
All rights reserved.
Ppt on cell the basic unit of life Ppt on natural disasters for kids Ppt on human chromosomes labels Ppt on pelton turbine Ppt on library management system in c++ Ppt on viruses and anti viruses downloads Water level indicator using 7 segment display ppt on tv Ppt on micro windmills Ppt on entrepreneurship and economic development Digital video editing ppt on ipad