Page
1
(This page has no text content)
Page
2
(This page has no text content)
Page
3
OBJECT-ORIENTED PROGRAMMING C++ SIMPLIFIED
Page
4
(This page has no text content)
Page
5
OBJECT-ORIENTED PROGRAMMING C++ SIMPLIFIED By HARI MOHAN PANDEY Assistant Professor Computer Engineering Department NMIMS University Mumbai (Maharashtra) E U U ∑ ∑ ∑ ∑ ∑ ∑ ∑∑ ∑ NEW DELHI ∑
Page
6
OBJECT-ORIENTED PROGRAMMING C++ SIMPLIFIED © by Laxmi Publications (P) Ltd. All rights reserved including those of translation into other languages. In accordance with the Copyright (Amendment) Act, 2012, no part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise. Any such act or scanning, uploading, and or electronic sharing of any part of this book without the permission of the publisher constitutes unlawful piracy and theft of the copyright holder’s intellectual property. If you would like to use material from the book (other than for review purposes), prior written permission must be obtained from the publishers. Typeset at ABRO Enterprises, Delhi First Edition: 2015 ISBN 978-93-81159-50-7 Limits of Liability/Disclaimer of Warranty: The publisher and the author make no representation or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties. The advice, strategies, and activities contained herein may not be suitable for every situation. In performing activities adult supervision must be sought. Likewise, common sense and care are essential to the conduct of any and all activities, whether described in this book or otherwise. Neither the publisher nor the author shall be liable or assumes any responsibility for any injuries or damages arising herefrom. The fact that an organization or Website if referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or Website may provide or recommendations it may make. Further, readers must be aware that the Internet Websites listed in this work may have changed or disappeared between when this work was written and when it is read. All trademarks, logos or any other mark such as Vibgyor, USP, Amanda, Golden Bells, Firewall Media, Mercury, Trinity, Laxmi appear- ing in this work are trademarks and intellectual property owned by or licensed to Laxmi Publications, its subsidiaries or affiliates. Notwithstanding this disclaimer, all other names and marks mentioned in this work are the trade names, trademarks or service marks of their respective owners. Published in india by UNIVERSITY SCIENCE PRESS (An Imprint of Laxmi Publications Pvt.Ltd.) An ISO 9001:2008 Certified Company 113, GOLDEN HOUSE, DARYAGANJ, NEW DELHI - 110002, INDIA Telephone : 91-11-4353 2500, 4353 2501 Fax : 91-11-2325 2572, 4353 2528 C— www.laxmipublications.com info@laxmipublications.com & Bengaluru 080-26 75 69 30 & Chennai 044-24 34 47 26, 24 35 95 07 & Cochin 0484-237 70 04, 405 13 03 & Guwahati 0361-254 36 69, 251 38 81 & Hyderabad 040-27 55 53 83, 27 55 53 93 & Jalandhar 0181-222 12 72 & Kolkata 033-22 27 43 84 & Lucknow 0522-220 99 16 & Mumbai 022-24 91 54 15, 24 92 78 69 & Ranchi 0651-220 44 64 Br an ch es
Page
7
Contents CHAPTER 0 : INTRODUCTION TO OOPs 1–9 Structured Programming 1 Procedural Programming 3 Programming Methodology 3 Object-Oriented Programming 5 Basic Concepts of OOPs 5 Characteristics of OOPs 8 Advantages of OOPs 9 Object-Oriented Languages 9 Object-based Languages 9 CHAPTER 1 : INTRODUCTION OF OBJECT-ORIENTED DESIGN 10–19 1.1 Introduction 10 1.2 Objects 11 1.3 Class and Instance 11 1.4 Polymorphism 12 1.5 Inheritance 12 1.6 Object-Oriented Analysis 12 1.7 Finding the Objects 13 1.8 Conceptual Modeling 13 1.9 Requirements Model 13 1.10 Analysis Model 13 1.11 The Design Model 13 1.12 The Implementation Model 14 1.13 Test Model 14 1.14 Object-Oriented Analysis and Design 14 1.15 The Evolution of Object Model 15 1.16 Object-Oriented Programming 15 1.17 Object-Oriented Design 15 1.18 Object-Oriented Analysis 16 (v)
Page
8
(vi) 1.19 Elements of Object Model 16 1.20 The Role of OOAD in the Software Life Cycle 17 1.21 OOAD Methodologies 18 1.22 Grady Booch Approach 18 CHAPTER 2 : STARTING WITH C++ 20–46 2.1 C++ Overview 20 2.2 C++ Character Set 20 2.3 C++ Tokens 21 2.4 Variables 25 2.5 Counting Tokens 26 2.6 Data Types 26 2.7 Qualifiers 27 2.8 Range of Data Types 28 2.9 Your First C++ Program 29 2.10 Structure of a C++ Program 33 2.11 Styles of Writing C++ Programs 35 2.12 Programming Examples 35 2.13 Ponderable Points 45 Exercise 45 CHAPTER 3 : C FEATURES OF C++ 47–115 3.1 Introduction 47 3.2 Operators and Expressions 47 3.3 Declaring Constants 72 3.4 Type Conversion 76 3.5 Decision Making: An Introduction 77 3.6 Unconditional Branching Using Goto 92 3.7 Introduction to Looping 94 3.8 Points to Ponder 110 Exercise 112 CHAPTER 4 : OPERATORS AND REFERENCES IN C++ 116–148 4.1 Introduction 116 4.2 Scope Resolution Operator 116 4.3 Reference Variables 122 4.4 The Bool Data Type 127 4.5 The Operator New and Delete 129
Page
9
(vii) 4.6 Malloc Vs New 140 4.7 Pointer Member Operators 140 4.8 Ponderable Points 147 Exercise 148 CHAPTER 5 : FUNCTION IN C++ 149–192 5.1 Introduction 149 5.2 Function Declaration/Prototyping 150 5.3 The Main Function in C++ 154 5.4 Recursion 154 5.5 Call by Reference 157 5.6 Call by Reference Vs Call by Address 165 5.7 Return by Reference 165 5.8 Inline Function 169 5.9 Function Overloading 175 5.10 Function with Default Arguments 183 5.11 Ponderable Points 189 Exercise 190 CHAPTER 6 : CLASS AND OBJECTS IN C++ 193–278 6.1 Working with Class 193 6.2 Programming Examples (Part-1) 197 6.3 Structure in C++ 215 6.4 Accessing Private Data 216 6.5 Programming Example (Part-2) 220 6.6 Passing and Returning Object 240 6.7 Array of Object 248 6.8 Friend Function 254 6.9 Static Class Members 266 6.10 Constant Member Function 274 Exercise 277 CHAPTER 7 : WORKING WITH CONSTRUCTOR AND DESTRUCTOR 279–333 7.1 Introduction 279 7.2 Constructor with Parameters 281 7.3 Implicit and Explicit Call to Constructor 283 7.4 Copy Constructor 306 7.5 Dynamic Initialization of Objects 311
Page
10
(viii) 7.6 Dynamic Constructor 316 7.7 Destructor 328 7.8 Ponderable Points 332 Exercise 332 CHAPTER 8 : WORKING WITH OPERATOR OVERLOADING 334–392 8.1 Introduction 334 8.2 Operator Overloading with Binary Operator 336 8.3 Overloading Assignment (=) Operator 346 8.4 Overloading Unary Operators 348 8.5 Overloading Using Friend Function 358 8.6 Rules of Operator Overloading 370 8.7 Type Conversion 371 8.8 Ponderable Points 390 Exercise 391 CHAPTER 9 : WORKING WITH INHERITANCE IN C++ 393–457 9.1 Introduction 393 9.2 Types of Inheritance 393 9.3 Public, Private and Protected Inheritance 398 9.4 Multiple Inheritance 424 9.5 Hierarchical Inheritance 431 9.6 Virtual Base Class 435 9.7 Constructor and Destructor in Inheritance 442 9.8 Containership 453 9.9 Ponderable Points 456 Exercise 456 CHAPTER 10 : POINTERS TO OBJECTS AND VIRTUAL FUNCTIONS 458–510 10.1 Pointer to Objects 458 10.2 The This Pointer 465 10.3 What is Binding in C++ ? 469 10.4 Virtual Functions 470 10.5 Working of a Virtual Function 476 10.6 Rules for Virtual Function 485 10.7 Pure Virtual Function and Abstract Class 485 10.8 Object Slicing 498
Page
11
(ix) 10.9 Some Facts about Virtual Function 501 10.10 Virtual Destructor 504 10.11 Ponderable Points 508 Exercise 509 CHAPTER 11 : INPUT-OUTPUT AND MANIPULATORS IN C++ 511–562 11.1 Introduction 511 11.2 C++ Stream Classes 511 11.3 Unformatted Input/Output 513 11.4 Formatted Input/Output Operations 524 11.5 Manipulators 545 11.6 Ponderable Points 561 Exercise 561 CHAPTER 12 : FILE HANDLING IN C++ 563–608 12.1 Introduction 563 12.2 File Streams 564 12.3 Opening and Closing a File 564 12.4 File Opening Modes 569 12.5 Checking End of File 574 12.6 Random Access in File 580 12.7 Command Line Arguments 587 12.8 Working with Binary Mode 592 12.9 Error Handling 603 12.10 Ponderable Points 607 Exercise 607 CHAPTER 13 : TEMPLATE PROGRAMMING 609–642 13.1 Introduction 609 13.2 Function Template 609 13.3 Class Template 625 13.4 Ponderable Points 641 Exercise 642 CHAPTER 14 : EXCEPTION HANDLING IN C++ 643–667 14.1 Introduction 643 14.2 Basics of Exception Handling 643 14.3 Exception Handling Mechanism 645
Page
12
(x) 14.4 Programming Examples 646 14.5 Exception Handling with Class 652 14.6 Catching all Exceptions 662 14.7 Specifying Exception for a Function 664 14.8 Ponderable Points 666 Exercise 666 CHAPTER 15 : OBJECT-ORIENTED PROGRAMMING HAND ON LAB 668–741 Experiment 1 : Program illustrating function overloading feature. 668 Experiment 2 : Programs illustrating the overloading of various operators. Ex : Binary operators, Unary operators, New and delete operators, etc. 671 Experiment 3 : Programs illustrating the use of following functions : (a) Friend functions (b) Inline functions (c) Static member functions (d) Functions with default arguments. 682 Experiment 4 : Programs to create singly and doubly linked lists and perform insertion and deletion Operations. Using self referential classes, new and delete operators. 690 Experiment 5 : Programs illustrating the use of destructor and the various types of constructors : 1. Constructor with no arguments 2. Constructors with arguments 3. Copy constructor etc. 713 Experiment 6 : Programs illustrating the various forms of inheritance : 1. Single Inheritance 2. Multiple Inheritances 3. Multilevel Inheritance. 4. Hierarchical inheritance, etc. 717 Experiment 7 : Write a program illustrating the use of virtual functions. 726 Experiment 8 : Write a program which illustrates the use of virtual base class. 728 Experiment 9 : Write a program which uses the following sorting methods for sorting elements in ascending order. Use function templates (a) Bubble sort (b) Selection sort (c) Quick sort. 732 Experiment 10 : Write programs illustrating file handling operations : (a) Copying a text file (b) Displaying the contents of the file, etc. 738 Appendix 1 : Key Elements Used in Trouble Free C++ 743–767 Appendix 2 : Questions Asked in Technical Interviews 768–770 References 771–773 Index 775–779
Page
13
Preface This book “OBJECT-ORIENTED PROGRAMMING C++ SIMPLIFIED” is a comprehensive, hands-on guide to C++ programming but one that doesn’t assume you’ve programmed before. (People familiar with earlier programming or another structured programming language will, of course, have an easier time and can move through the early chapters quickly.) Soon, you will write sophisticated programs that take full advantages of C++’s exciting and powerful object-oriented nature. You will start as a beginner and when you have finished this book, you will have moved far along the road to C++ mastery. I have tried hard to cover at the least the fundamentals of every technique that a C++ professional will need to master. I have also made sure to stress the new ways of thinking needed to master C++ programming, so even experts in more traditional programming languages can benefit from this book. I have taken this approach because trying to force C++ into the framework of older programming languages is ultimately self-defeating, you can’t take advantage of its power if you continue to think within an older paradigm. To make this book even more useful, there are extensive discussions of important topics left out of most other introductory books. There are whole chapters on objects, including non- trivial examples of building your own objects with C++. When I teach you process of inheritance at that time I have introduced you to develop C++ code on behalf of inherited diagrams. There is a chapter for input-output manipulators which shows you number of functions used in C++ for input/output control. In the same chapter I teach you about manipulator and ways to develop your own manipulator. There is a whole chapter for miscellaneous new features of C++. There is also a chapter on exception handling. The book has also dealt about keeping file information through the chapter File Handling. It also has chapters for Standard Template Library and for the String Class and a whole chapter for showing the hidden secrets of C++. The book also includes lots of examples with step-by-step explanation and an extensive discussion of sorting and searching techniques and lots of tips and tricks. In sum, unlike many of the introductory books out there, I not only want to introduce you to a topic, but I go into it in enough depth that you can actually use the techniques for writing practical programs. Now a confession: My original goal was to make this book a “one-stop resource”, but, realistically, C++ has gotten far too big and far too powerful for any one book to do this. Nonetheless, if you finish this book, I truly believe that you will be in a position to begin writing commercial-quality C++ programs! True mastery will take longer. I have tried to give suggestions that can take you to next level. (xi)
Page
14
(xii) • HOW THIS BOOK IS ORGANIZED The subject matter of this book is divided into 15 chapters (including chapter 0). Each chapter has been written and developed with immensely simplified programs (except chapter 1, which is foundation chapter for various programming methodology) which will clear the core concepts of the C++ language. The book “OBJECT ORIENTED PROGRAMMING C++ SIMPLIFIED” has been written specially for those students who are tyro in the field of programming. Inside the book you will find numerous programs instead of just code snippet to illustrate even the basic concept. The book assumes no previous exposure to the C++ programming language. It also contains some good programming examples which might be useful for experienced programmers. All the programming examples given in the book have been tested on VC++ compiler, Turbo C++ 3.0 and Turbo C++ 4.5 compilers under windows and DOS. Each chapter contains a number of examples to explain the theoretical as well as practical concepts. Every chapter is followed by questions to test the student performance and retentivity. Here are short descriptions of the chapters: Chapter 0: Covers the topics of basic introduction of programming methodology and introduction of OOP like structured programming by which one can understand the elementary elements (sequence structure, Loop or iteration and Decision structure) of any programming language. The chapter also explains the basic approaches (Bottom-up and Top-down) and the basic concepts of object-oriented programming too. It gives an idea to programmer to categorise any programming language into object-oriented or object based language. Chapter 1: This chapter gives the details of fundamental aspects of “object oriented design and analysis” and covers the details of “Grady Booch Approach”, principles used for OOAD. It flashes the concepts where OOAD fits in software development life cycle. Chapter 2: In this chapter I have explained the historical development of C++ language. The chapter also gives introductory idea of tokens, variables, data types and basic structure of C++ program. In the same chapter I have explained the method of compiling and executing the C++ program on Turbo C++3.0, Turbo C++ 4.5 and VC++. Chapter 3: This chapter introduces programmers about the behaviour of operators used in C++. Here I have explained the most of the common features applied in C and C++ both, because as we say C++ is super set of C then operators and expressions used in C must be implemented with C++ too. Chapter 4: Covers the operators used only with C++ and not with C. Here I have covered the operators like scope resolution operator, reference variables, bool data type. This chapter gives idea of dynamic memory allocation and operators new and delete for dynamic memory allocation in C++. Chapter 5: Gives the idea of declaring function (prototyping), function of main () function, introduction of recursion. It also gives the meaning of call by reference and call by address and difference between call by reference and call by address. Here I have explained the functionality of inline function and function overloading too. Chapter 6: Gives the introduction of class and objects used in C++. Here I have put the comparison of structure and class, way of accessing private data and given an idea about
Page
15
(xiii) passing and returning objects. In this chapter I have given some very crucial elements of C++ like array of objects, friend function, Static class members and constant member function. All these concepts play a very important role in software development. Chapter 7: This chapter covers the behaviours of a constructor. Here I show the role of different types of constructor like default constructor, constructor with parameters, copy constructor. This chapter also gives the ideas of dynamic constructor and destructor. Chapter 8: Gives ideas to programmer to overload different types of operators used in C++ like, binary operators, assignment operator, unary operators. Overloading with the help of friend function and rules of overloading any operator and way for type conversion too. Chapter 9: In this chapter we will deal the concept of inheritance, different types of inheritance i.e., single level, multilevel, multiple, hierarchical and hybrid. Here I have also defined the different visibility modifier with respect to inheritance. Application of constructor and destructor in inheritance and concept of containership is also defined in the same chapter. Chapter 10: This chapter gives the way of implementing the concepts like pointer to objects, this pointer, and way of binding, what is virtual function and how to work with virtual function, rules for virtual function. This chapter also gives the comparison of virtual function and pure virtual function. Also included are the fundamental concepts of object slicing and virtual destructor. Chapter 11: Here I have explained the concepts of C++ stream classes and formatted and unformatted input and output operation applied in C++ as well as the concept of manipulator. Chapter 12: This chapter gives the idea of how to handle file in C++ programming language and introduces the programmer about the fundamental concepts of file streams, way of opening and closing file, different modes of opening a text file in C++. This chapter also gives the approaches to check end of any file, Random access in file. In the same chapter I have put the introductory ideas of command line argument and ways of working with binary mode and error handling mechanism with file handling. Chapter 13: Covers the introductory idea of template programming i.e., function template and class template. Chapter 14: This chapter deals with basic concepts of exception handling mechanism and how to handle exception with the help of class, how to re-throw an exception, how to catch all exceptions. Chapter 15: Covers all the experiments given in the syllabus. Appendix–1 Presents some language-technical elements. Appendix–2 Discusses the technical questions which are generally asked in technical interviews. • IMPLEMENTATION NOTE The language used in this book is ‘‘Pure C++’’ as defined in the C++ standard. Therefore, the examples ought to run on every C++ implementation. The major program fragments in this book were tried using several C++ implementations. Examples using features only recently adopted into C++ didn’t compile on every implementation. However, I see no point in mentioning which implementations failed to compile which examples. Such information would soon be out
Page
16
(xiv) of date because implementers are working hard to ensure that their implementations correctly accept every C++ feature. • SUGGESTIONS FOR C PROGRAMMERS The better one knows C, the harder it seems to be to avoid writing C++ in C style, thereby losing some of the potential benefits of C++. Please take a look at Appendix B, which describes the differences between C and C++. Here are a few pointers to the areas in which C++ has better ways of doing something than C has: 1. Macros are almost never necessary in C++. Use const or enum to define manifest constants, inline to avoid function-calling overhead, templates to specify families of functions and types, and namespaces to avoid name clashes. 2. Don’t declare a variable before you need it so that you can initialize it immediately. A declaration can occur anywhere a statement can, in for-statement initializers, and in conditions. 3. Don’t use malloc(). The new operator does the same job better, and instead of realloc(), try a vector. 4. Try to avoid v o i d *, pointer arithmetic, unions, and casts, except deep within the implementation of some function or class. In most cases, a cast is an indication of a design error. If you must use an explicit type conversion, try using one of the ‘‘new casts’’ for a more precise statement of what you are trying to do. 5. Minimize the use of arrays and C-style strings. The C++ standard library s t r i n g and vector classes can often be used to simplify programming compared to traditional C style. In general, try not to build yourself what has already been provided by the standard library. To obey C linkage conventions, a C++ function must be declared to have C linkage. Most important, try thinking of a program as a set of interacting concepts represented as classes and objects, instead of as a bunch of data structures with functions twiddling their bits. • SUGGESTIONS FOR C++ PROGRAMMERS By now, many people have been using C++ for a decade. Many more are using C++ in a single environment and have learned to live with the restrictions imposed by early compilers and first generation libraries. Often, what an experienced C++ programmer has failed to notice over the years is not the introduction of new features as such, but rather the changes in relationships between features that make fundamentally new programming techniques feasible. In other words, what you didn’t think of when first learning C++ or found impractical just might be a superior approach today. You find out only by re-examining the basics. Read through the chapters in order. If you already know the contents of a chapter, you can be through in minutes. If you don’t already know the contents, you’ll have learned something unexpected. I learned a fair bit writing this book and I suspect that hardly any C++ programmer knows every feature and technique presented. Furthermore, to use the language well, you need a perspective that brings order to the set of features and techniques. Through its organization and examples, this book offers such a perspective.
Page
17
(xv) • EXERCISES Exercises are found at the ends of chapters. The exercises are mainly of the write a program variety. Always write enough code for a solution to be compiled and run with at least a few test cases. The exercises vary considerably in difficulty, so they are marked with an estimate of their difficulty. The scale is exponential so that if an exercise takes you ten minutes, it might take an hour and it might take a day. The time needed to write and test a program depends more on your experience than on the exercise itself. An exercise might take a day if you first have to get acquainted with a new computer system in order to run it. On the other hand, an exercise might be done in an hour by someone who happens to have the right collection of programs handy. Any book on programming in C can be used as a source of extra exercises for some introductory chapters. Any book on data structures and algorithms can be used as a source of exercises for some middle chapters for the formation of algorithms.
Page
18
Acknowledgement First of all, I would like to say thanks to “BABA VISVNATH” for their constant bless in writing this book. As understanding of the study like this is never the outcome of the efforts of a single person, rather it bears the imprint of a number of people who directly or indirectly helped me in completing this book. I would be failing in my duty if I don’t say a word of thanks to all those who have offered sincere advice to make this book educative, effective, and pleasurable. I would like to acknowledge My Father Dr. V. N. Pandey My Mother Smt. Madhuri Pandey, My sisters Ms. Anjana Pandey, Ms. Ranjana Pandey and My brother Mr. Man Mohan Pandey. I have immense pleasure in expressing my whole hearted gratitude to Prof. RR Sedamkar (Associate Dean, MPSTME), for providing help and guidance during the writing of this book. I also wish to thank my lots of student whose conceptual queries have always helped me in digging the subject matter deep. I am thankful to all the employees of MPSTME, NMIMS University especially Mr. Bharat Thodji and Mr. Mahendra Joshi who have been supporting me in all types of Lab activities during the writing of this book. How can I forget my close buddy Lecturer Shreedhar Desmukh who has supported me most of the time during writing of the book? I am also thankful to the librarian of MPSTME at Shirpur Mr. Anand Gawdekar who provided each and every good book timely. —Author (xvi)
Page
19
Salient Features of the Book (a) Lucid explanation of OOP concept. (b) Covers C features in nutshell. (c) Emphasis is on new features of C++. (d) Overloaded almost all types of operators. (e) 12 fully explained programs on type conversion. (f) Virtual Functions explored in depth. (g) Covers advance features. (h) Detailed coverage of exception handling and templates. (i) Over 600 thoroughly explained programs. (j) Plenty of exercises to try. (k) Detailed description of file handling with more than 40 thoroughly explained programs. (xvii)
Page
20
List of Experiments OBJECT-ORIENTED PROGRAMMING LAB 1. Program illustrating function overloading feature. 2. Programs illustrating the overloading of various operators: Ex: Binary operators, Unary operators, New and delete operators etc. 3. Programs illustrating the use of following functions: (a) Friend functions (b) Inline functions (c) Static member functions (d) Functions with default arguments. 4. Programs to create singly and doubly linked lists and perform insertion and deletion operations. Using self referential classes, new and delete operators. 5. Programs illustrating the use of destructor and the various types of constructors (no arguments, constructor, constructor with arguments, copy constructor etc). 6. Programs illustrating the various forms of inheritance: Ex. Single, multiple, multilevel, hierarchical inheritance etc. 7. Write a program having student as on abstract class and create many derived classes such as Engg, Science, Medical, etc., from student class. Create their objects and process them. 8. Write a program illustrating the use of virtual functions. 9. Write a program which illustrates the use of virtual base class. 10. Write a program which uses the following sorting methods for sorting elements in ascending order. Note: Use function templates (a) Bubble sort (b) Selection sort (c) Quick sort. 11. Write a program which illustrates the use of class templates: Ex. (a) Stack class (b) Queue class. 12. Write programs illustrating file handling operations: Ex. (a) Copying a text file (b) Displaying the contents of the file etc. 13. Write programs illustrating the console I/O operations. 14. Write programs illustrating how exceptions are handled (ex: division-by-zero, overflow and underflow in stacks etc.). (xviii)