CS410 – Software Engineering Lecture #5: C++ Basics III

Slides:



Advertisements
Similar presentations
Object-Oriented programming in C++ Classes as units of encapsulation Information Hiding Inheritance polymorphism and dynamic dispatching Storage management.
Advertisements

Constructor. 2 constructor The main use of constructors is to initialize objects. A constructor is a special member function, whose name is same as class.
March 25, 2014CS410 – Software Engineering Lecture #12: Advanced C++ I 1 Alumni Party The Alumni Party will take place on Tuesday, May 13 It would be great.
Chapter 7: User-Defined Functions II
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
A RRAYS, P OINTERS AND R EFERENCES 1. A RRAYS OF O BJECTS Arrays of objects of class can be declared just like other variables. class A{ … }; A ob[4];
Classes: A Deeper Look Systems Programming.
Welcome to Constructors and Destructors Prepared By Prepared By : VINAY ALEXANDER ( विनय अलेक्जेण्डर )PGT(CS) KV JHAGRAKHAND.
More Classes in C++ Bryce Boe 2012/08/20 CS32, Summer 2012 B.
Review of C++ Programming Part II Sheng-Fang Huang.
 2006 Pearson Education, Inc. All rights reserved Classes: A Deeper Look.
1 CISC181 Introduction to Computer Science Dr. McCoy Lecture 19 Clicker Questions November 3, 2009.
March 4, 2014CS410 – Software Engineering Lecture #9: C++ Basics III 1 Today’s Topics The operators new and deleteThe operators new and delete The scope.
CS212: Object Oriented Analysis and Design Lecture 6: Friends, Constructor and destructors.
February 11, 2005 More Pointers Dynamic Memory Allocation.
 2006 Pearson Education, Inc. All rights reserved Classes: A Deeper Look, Part 2.
SEN 909 OO Programming in C++ Final Exam Multiple choice, True/False and some minimal programming will be required.
Copyright © 2012 Pearson Education, Inc. Chapter 13: Introduction to Classes.
March 6, 2014CS410 – Software Engineering Lecture #10: C++ Basics IV 1 Structure Pointer Operator For accessing members in structures and classes we have.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 223 – Advanced Data Structures C++ Review Part-I.
Classes Representing Non-Trivial Objects. Problem Write a program that reads a temperature (either Fahrenheit or Celsius), and displays that same temperature.
CSC241 Object-Oriented Programming (OOP) Lecture No. 6.
More C++ Features True object initialisation
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
CS-1030 Dr. Mark L. Hornick 1 Basic C++ State the difference between a function/class declaration and a function/class definition. Explain the purpose.
1 Classes II Chapter 7 2 Introduction Continued study of –classes –data abstraction Prepare for operator overloading in next chapter Work with strings.
LECTURE LECTURE 11 Constructors and destructors Copy constructor Textbook: p , 183.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 15. Dictionaries (1): A Key Table Class.
Structs and Classes Structs A struct can be used to define a data structure type as follows: struct Complex { double real, imag;} // specifying a Complex.
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
Chapter 1 C++ Basics Review (Section 1.4). Classes Defines the organization of a data user-defined type. Members can be  Data  Functions/Methods Information.
Introduction to Classes in C++ Instructor - Andrew S. O’Fallon CptS 122 Washington State University.
CS162 - Topic #6 Lecture: Pointers and Dynamic Memory –Review –Dynamically allocating structures –Combining the notion of classes and pointers –Destructors.
Object-Oriented programming in C++ Classes as units of encapsulation Information Hiding Inheritance polymorphism and dynamic dispatching Storage management.
1 Classes struct Public and Private Parts of a struct Class Scope of a Class Overloading Member Functions Class in a Class Static Members of Classes this.
Learners Support Publications Constructors and Destructors.
Welcome to Constructors and Destructors Prepared By Prepared By : VINAY ALEXANDER ( विनय अलेक्जेण्डर )PGT(CS) KV JHAGRAKHAND.
Memory Management.
CS410 – Software Engineering Lecture #12: C++ Basics V
Yan Shi CS/SE 2630 Lecture Notes
Constructors and Destructors
Eine By: Avinash Reddy 09/29/2016.
Pointer to an Object Can define a pointer to an object:
Procedural and Object-Oriented Programming
Pointers and Dynamic Arrays
Friend Class Friend Class A friend class can access private and protected members of other class in which it is declared as friend. It is sometimes useful.
CISC181 Introduction to Computer Science Dr
CS410 – Software Engineering Lecture #11: C++ Basics IV
Introduction to Classes
Structures Revisited what is an aggregate construct? What aggregate constructs have we studied? what is a structure? what is the keyword to define a structure?
This pointer, Dynamic memory allocation, Constructors and Destructor
group work #hifiTeam
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes
Introduction to Classes
Chapter 15 Pointers, Dynamic Data, and Reference Types
CS212: Object Oriented Analysis and Design
Pointers, Dynamic Data, and Reference Types
Classes Short Review of Topics already covered Constructor
Dr. Bhargavi Dept of CS CHRIST
Constructors and Destructors
9-10 Classes: A Deeper Look.
Java Programming Language
Recitation Course 0603 Speaker: Liu Yu-Jiun.
ENERGY 211 / CME 211 Lecture 17 October 29, 2008.
9-10 Classes: A Deeper Look.
CS410 – Software Engineering Lecture #6: Advanced C++ I
四時讀書樂 (春) ~ 翁森 山光照檻水繞廊,舞雩歸詠春風香。 好鳥枝頭亦朋友,落花水面皆文章。 蹉跎莫遣韶光老,人生唯有讀書好。
(4 – 2) Introduction to Classes in C++
SPL – PS3 C++ Classes.
Presentation transcript:

CS410 – Software Engineering Lecture #5: C++ Basics III Nested Classes Like blocks and namespaces, classes are scopes and can nest. Nesting allows local hiding of names and local allocation of resources. This is often desirable when a class is needed as part of the implementation of a larger construct. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

CS410 – Software Engineering Lecture #5: C++ Basics III Nested Classes Example: char c; // external scope ::c class X // outer class declaration X:: { public: char c; // X::c class Y // inner class declaration X::Y:: void foo(char e) { X t; ::c = t.X::c = c = e; } private: char c; // X::Y::c }; t.X::c is the same as t.c March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

static and const Members Using the modifier static in declaring a data member means that the data member is independent of any given class variable. The data member is part of the class but separate from any single class object. You remember that nonstatic data members are created for each instance of the class. Using static data allows class data to be scoped to the class but still require only one object for its storage. Without static data members, data required by all instances of a class would have to be global. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

static and const Members Since static members are independent of a particular instance, they can be accessed in the form class-name :: identifier Example: class Point { public: static int how_many; }; Point::how_many = 0; … ++Point::how_many; March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

static and const Members A static member function has the modifier static precede the return type inside the class declaration. Example: class Foo { static int foo_function(); }; int Foo::foo_function() … } March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

static and const Members A data member declared with the const modifier cannot be modified after initialization. syntactically, a const member function has the modifier follow the argument list inside the class declaration. Example: class Foo { int foo_function() const; }; int Foo::foo_function() const {} March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

static and const Members The const and static member function implementation can be understood terms of this pointer access. An ordinary member function is invoked as x.fcn(i, j, k). It has an explicit argument list i, j, k and an implicit argument list that includes the members of x (accessible through the this pointer). A static member function does not get the implicit arguments. A const member function cannot modify its implicit arguments. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

CS410 – Software Engineering Lecture #5: C++ Basics III The this Pointer The keyword this denotes a self-referential pointer to a class object. It cannot be used in static member functions. Example: class Point { public: void init(double u, double v) { x = u; y = v; } Point inverse() { x = -x; y = -y; return (*this); } Point* where_am_I() { return this; } Private: double x, y; }; March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors and Destructors A constructor is a member function whose name is the same as the class name. It constructs values of the class type. This process involves initializing data members and, frequently, allocating free store by using new. A destructor is a member function whose name is the class name preceded by the ~ character. It finalizes objects of the class type. Typically, a destructor deallocates store assigned to the object by using delete. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors and Destructors can take arguments, can be overloaded. A constructor is invoked whenever its associated type is used in a definition, call-by-value is used to pass a value to a function, the return value of a function must create a value of associated type. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors and Destructors cannot take arguments, cannot be overloaded. A destructor is invoked implicitly whenever an object goes out of scope. Constructors and destructors do not have return types and cannot use return expression statements. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Classes with Constructors Example: A data type ModInt for storing numbers that are computed with a modulus. class ModInt { public: ModInt(int i); // constructor declaration void assign(int i) { v = i % modulus; } void print() const {cout << v << ‘\n’; } const static int modulus; private: int v; }; ModInt::ModInt(int i) { v = i % modulus; } // constructor definition const int ModInt::modulus = 60; March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Classes with Constructors void main() { ModInt a(5); ModInt b(62); a.print(); b.print(); } What does the output look like? 5 2 March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Classes with Constructors What happens if we declare a variable c as follows: ModInt c; Since this class has only one constructor, and this constructor needs one int argument, this declaration causes a compile-time error. The declaration above requires a default constructor. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

The Default Constructor A constructor requiring no arguments is called the default constructor. It can be a constructor with an empty argument list or one whose arguments all have default values. It has the special purpose of initializing arrays of objects of its class. In the ModInt example, it would be useful to define a default value of v to be 0. To achieve this, we could add the following default constructor: ModInt() { v = 0; } March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

The Default Constructor main () { ModInt s1, s2; ModInt d[5]; ModInt s1.print(); ModInt s2.print(); ModInt d[3].print(); } Output: March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

The Default Constructor If a class does not have a constructor, the system provides a default constructor. If a class has constructors but no default constructor, array allocation causes a syntactic error. In our ModInt example, the following constructor could serve as both a general initializer and a default constructor: ModInt(int i = 0) { v = i % modulus; } March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructor Initializers A special syntax is used for initializing class members. Constructor initializers for class members can be specified in a comma-separated list that follows the constructor parameter list. The previous example can be recoded as: ModInt(int i = 0): v(i % modulus) {} Notice that initialization replaces assignment. The individual members must be initializable as member-name (expression list). March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors as Conversions Constructors of a single parameter are used automatically for conversion unless declared with the keyword explicit. For example, T1::T1(T2) provides code that can be used to convert a T2 object to a T1 object. Let us take a look at the following class PrintChar, whose purpose is to print invisible characters with their ASCII designation (for example, the code 07 is alarm or bel). March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors as Conversions class PrintChar { public: PrintChar(int i = 0) : c(i % 128) {} void print() const { cout << rep[c]; } private: int c; static const char* rep[128]; }; const char *PrintChar::rep[128] = {“nul”, “soh”, “stx”, …, “}”, “~”, “del”}; March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors as Conversions int main() { PrintChar c; for (int i = 0; i < 128; i++) c = i; // or: c = static_cast<PrintChar>(i); c.print(); cout << endl; } This program prints out the first 128 ASCII characters or their printable representations. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Structure Pointer Operator For accessing members in structures and classes we have used the member operator ‘.’. Now we introduce the structure pointer operator ‘->’, which provides access to the members of a structure via a pointer. If a pointer variable is assigned the address of a structure or class object, a member of the object can be accessed by the ‘->’ operator. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Structure Pointer Operator Example: int main() { MyClass a, *b; a.SetValue(9); b->SetValue(5); (*b).SetValue(7); } Member access is correct in all three cases (but note that we should allocate memory for b first). March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

Constructors and Destructors Now we are going to talk about two examples for classes with constructors and destructors: a singly linked list a two-dimensional array overloaded operators and user-defined conversions March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

CS410 – Software Engineering Lecture #5: C++ Basics III A Singly Linked List We are going to develop a singly linked list datatype. This is the prototype of many useful dynamic abstract data types (ADTs) called self-referential structures. Self-referential structures have pointer members that refer to objects of their own type. Such structures are the basis of many useful container classes. March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

CS410 – Software Engineering Lecture #5: C++ Basics III A Singly Linked List We want to be able to perform the following list operations: Prepend: adds an element to the front of the list First: returns the first element in the list Print: prints the list contents Del: deletes the first element in the list Release: destroys the list March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III

CS410 – Software Engineering Lecture #5: C++ Basics III A Singly Linked List struct SListElem { char data; SListElem *next; }; class SList public: SList(): h(0) {} // 0 denotes empty list ~SList() { Release(); } void Prepend(char c); void Del(); SListElem *First() const { return h; } void Print() const; void Release(); private: SListElem *h; // head of SList March 7, 2019 CS410 – Software Engineering Lecture #5: C++ Basics III