Facebook Pixel
Searching...
English
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Object-oriented Programming with C++

Object-oriented Programming with C++

by E. Balagurusamy 1994 336 pages
3.96
100+ ratings
Listen
Listen to Summary

Key Takeaways

1. OOP Tackles Software Complexity with Data-Centric Design

OOP treats data as a critical element in the program development and does not allow it to flow freely around the system.

Emphasis on Data. Object-oriented programming (OOP) shifts the focus from procedures to data, addressing the limitations of procedure-oriented programming (POP) where data is vulnerable to modification by any function. OOP encapsulates data within objects, protecting it from unintended changes and promoting data integrity. This approach allows for a more modular and maintainable codebase, especially as software systems grow in complexity.

Real-World Modeling. OOP allows developers to model real-world entities more effectively by representing them as objects with specific attributes (data) and behaviors (functions). This close mapping between the problem domain and the solution domain makes the code easier to understand and maintain. For example, a "car" object might have attributes like color, model, and speed, and behaviors like accelerate, brake, and turn.

Bottom-Up Approach. Unlike POP's top-down approach, OOP employs a bottom-up strategy, building systems from individual objects and their interactions. This allows for greater flexibility and adaptability to changing requirements, as new objects can be easily added or modified without affecting the entire system. This approach is particularly beneficial in dynamic business environments where requests for change are unavoidable.

2. C++ Extends C with Powerful Object-Oriented Features

The most important facilities that C++ adds on to C are classes, inheritance, function overloading, and operator overloading.

Superset of C. C++ builds upon the foundation of C, retaining its efficiency and low-level capabilities while adding object-oriented features. This allows programmers to leverage existing C code and knowledge while transitioning to a more powerful and flexible programming paradigm. C++ maintains compatibility with most C programs, making it a versatile choice for a wide range of applications.

Key OOP Enhancements. C++ introduces classes, inheritance, function overloading, and operator overloading, enabling the creation of abstract data types and supporting polymorphism. These features allow programmers to build large programs with clarity, extensibility, and ease of maintenance. These additions transform C from a language facilitating top-down, structured design to one that provides bottom-up, object-oriented design.

Versatile Applications. C++ is suitable for virtually any programming task, including the development of editors, compilers, databases, communication systems, and complex real-life application systems. Its ability to create hierarchy-related objects allows for the construction of special object-oriented libraries, promoting code reuse and efficient development. C++'s versatility and ability to map real-world problems effectively position it as a leading general-purpose language.

3. Tokens, Data Types, and Operators Form the Building Blocks of C++

As we know, the smallest individual units in a program are known as tokens.

Fundamental Elements. C++ programs are constructed from tokens, which include keywords, identifiers, constants, strings, and operators. These tokens, combined with white spaces and the language's syntax, form the basic vocabulary and grammar of C++. Understanding these elements is crucial for writing well-formed and functional C++ code.

Data Type Variety. C++ offers a rich set of data types, including basic types (int, char, float, double), user-defined types (structures, classes, enums), and derived types (arrays, pointers, functions). These data types provide flexibility in representing different kinds of data and enable programmers to create complex data structures tailored to specific problem domains. The addition of bool and wchar_t further enhances C++'s ability to handle diverse data.

Operator Power. C++ provides a wide range of operators, including arithmetic, logical, relational, bitwise, and assignment operators. Additionally, C++ introduces new operators like the scope resolution operator (::) and memory management operators (new and delete). Operator overloading allows programmers to define custom behavior for operators when applied to user-defined types, enhancing code expressiveness and readability.

4. Functions in C++ Offer Flexibility and Code Reusability

Among the OOP languages today, C++ is by far the most widely used language.

Modular Programming. Functions are the building blocks of C++ programs, promoting modularity and code reusability. Dividing a program into functions simplifies development, reduces code size, and improves maintainability. C++ functions have evolved to include features like function prototyping, call by reference, inline functions, and default arguments, enhancing their flexibility and power.

Function Prototyping. Function prototyping is a major improvement in C++, enabling the compiler to check for argument type and number mismatches during function calls. This helps catch errors early in the development process, improving code reliability. Prototyping is essential in C++, ensuring that functions are called with the correct arguments and return types.

Advanced Features. C++ functions support call by reference, allowing functions to modify the original variables in the calling program. Inline functions eliminate the overhead of function calls, improving performance for small, frequently used functions. Default arguments provide flexibility in function calls, allowing programmers to omit arguments with predefined values. Function overloading enables the use of the same function name for different tasks, depending on the argument list.

5. Classes and Objects: Encapsulation and Abstraction in Action

The wrapping up of data and functions into a single unit (called class) is known as encapsulation.

Classes as Blueprints. A class is a user-defined data type that encapsulates data (attributes) and functions (methods) that operate on that data. Classes provide a blueprint for creating objects, which are instances of the class. This encapsulation promotes data hiding and modularity, key principles of OOP.

Data Hiding and Abstraction. Classes use access specifiers (private, protected, public) to control the visibility of their members. Private members are accessible only from within the class, providing data hiding and preventing direct access from outside. Public members define the interface of the class, allowing controlled access to the object's data and functionality. Abstraction allows classes to represent essential features without including background details or explanations.

Objects in Action. Objects are the basic run-time entities in an object-oriented system. They interact by sending messages to one another, invoking member functions to perform specific tasks. Classes and objects enable programmers to model real-world entities and their interactions, leading to more intuitive and maintainable code.

6. Constructors and Destructors Manage Object Lifecycles

Object-Oriented Programming (OOP) has become the preferred programming approach by the software industries, as it offers a powerful way to cope with the complexity of real-world problems.

Automatic Initialization. Constructors are special member functions that automatically initialize objects of a class when they are created. They ensure that objects are in a valid state before they are used. Constructors have the same name as the class and do not have a return type.

Dynamic Memory Management. Destructors are special member functions that automatically deallocate memory and perform cleanup tasks when an object is destroyed. They are essential for preventing memory leaks and ensuring proper resource management. Destructors have the same name as the class, preceded by a tilde (~).

Lifecycle Management. Constructors and destructors work together to manage the lifecycle of objects, from creation to destruction. They provide a mechanism for automatic initialization and cleanup, reducing the risk of errors and improving code reliability. Dynamic constructors allocate memory using the new operator, while destructors release that memory using the delete operator.

7. Operator Overloading and Type Conversions Enhance Code Expressiveness

The mechanism of giving such special meanings to an operator is known as operator overloading.

Extending Operator Behavior. Operator overloading allows programmers to redefine the behavior of operators (e.g., +, -, *, /) for user-defined types. This enables the use of familiar syntax for operations on objects, enhancing code readability and expressiveness. Operator functions are special functions that define the custom behavior of operators.

Type Conversion Flexibility. C++ supports type conversions between built-in types and user-defined types, as well as between different user-defined types. Constructors can be used to convert from basic types to class types, while conversion functions (casting operators) can be used to convert from class types to basic types. These conversions enable seamless integration of user-defined types with existing code.

Rules and Restrictions. While operator overloading provides great flexibility, it is subject to certain rules and restrictions. Only existing operators can be overloaded, and their syntax (number of operands, precedence, associativity) cannot be changed. Certain operators (e.g., ., ::, ?:) cannot be overloaded. Operator functions must be either member functions or friend functions, each with its own implications for argument handling.

8. Inheritance Enables Code Reuse and Extensibility

Through inheritance, we can eliminate redundant code and extend the use of existing classes.

Deriving New Classes. Inheritance is a powerful mechanism for creating new classes (derived classes) from existing classes (base classes). Derived classes inherit the attributes and behaviors of their base classes, promoting code reuse and reducing redundancy. Inheritance supports hierarchical classification, allowing for the creation of specialized classes that build upon more general ones.

Visibility Modes. The visibility mode (private, protected, public) in the derived class declaration controls the accessibility of base class members in the derived class. Public inheritance preserves the public interface of the base class, while private inheritance hides the base class members from external access. Protected members are accessible within the class and its derived classes, providing a balance between data hiding and inheritance.

Types of Inheritance. C++ supports single inheritance (one base class), multiple inheritance (multiple base classes), multilevel inheritance (deriving from a derived class), hierarchical inheritance (multiple derived classes from one base class), and hybrid inheritance (combinations of the above). These different forms of inheritance provide flexibility in modeling complex relationships between classes.

9. Pointers, Virtual Functions, and Polymorphism Enable Dynamic Behavior

Polymorphism plays an important role in allowing objects having different internal structures to share the same external interface.

Dynamic Binding. Polymorphism, the ability of objects of different classes to respond to the same message in different ways, is a key feature of OOP. C++ achieves runtime polymorphism through virtual functions and pointers to objects. Virtual functions allow the correct function to be called at runtime based on the type of object being pointed to, enabling dynamic behavior.

Object Pointers. Pointers to objects provide a mechanism for manipulating objects indirectly. A base class pointer can point to objects of derived classes, allowing for the creation of heterogeneous collections of objects. However, accessing members of the derived class through a base class pointer requires careful consideration of virtual functions and dynamic binding.

Virtual Functions. Declaring a function as virtual in the base class ensures that the correct version of the function is called at runtime, even when accessed through a base class pointer. This enables polymorphism, allowing objects of different classes to respond to the same message in their own way. Pure virtual functions create abstract classes, which cannot be instantiated but serve as blueprints for derived classes.

10. C++ Streams Provide a Device-Independent I/O System

The object cout has a simple interface.

Abstraction of I/O Devices. C++ streams provide a device-independent interface for performing input and output operations. Streams abstract away the details of the underlying devices (e.g., keyboard, screen, disk files), allowing programmers to work with a consistent interface regardless of the device being accessed. This promotes code portability and simplifies I/O operations.

Stream Classes. The C++ I/O system is built upon a hierarchy of stream classes, including istream (input stream), ostream (output stream), and iostream (input/output stream). These classes provide member functions for performing formatted and unformatted I/O operations. The header file iostream must be included in all programs that use streams.

Formatted and Unformatted I/O. C++ streams support both formatted and unformatted I/O operations. Formatted I/O allows for precise control over the appearance of output, using functions like width(), precision(), and fill(). Unformatted I/O provides basic character-oriented and line-oriented input/output, using functions like get(), put(), getline(), and write().

11. Templates Enable Generic Programming for Type-Agnostic Code

Object-oriented programming is not the right of any particular language.

Parameterized Types. Templates allow programmers to write generic code that can work with different data types without having to be rewritten for each type. Templates enable the creation of class templates and function templates, which can be instantiated with specific data types at compile time. This promotes code reuse and reduces code duplication.

Class Templates. A class template defines a generic class with type parameters. The type parameters are substituted with specific data types when an object of the class is created. This allows for the creation of arrays, vectors, lists, and other data structures that can hold different types of data.

Function Templates. A function template defines a generic function with type parameters. The type parameters are substituted with specific data types when the function is called. This allows for the creation of sorting algorithms, searching algorithms, and other functions that can work with different types of data.

12. Exception Handling Ensures Robust and Reliable Software

Many software products are either not finished, or not used, or else are delivered with major errors.

Handling Runtime Anomalies. Exception handling provides a mechanism for detecting and responding to runtime errors or unusual conditions that may occur during program execution. Exceptions can be synchronous (e.g., division by zero) or asynchronous (e.g., keyboard interrupts). C++ exception handling is designed to handle synchronous exceptions.

Try, Throw, and Catch. The C++ exception handling mechanism is built upon three keywords: try, throw, and catch. The try block encloses code that may generate exceptions. The throw statement signals that an exception has occurred. The catch block handles the exception, taking appropriate action to recover from the error.

Robust Code. Exception handling improves the robustness and reliability of software by providing a structured way to deal with errors. By anticipating potential problems and implementing appropriate exception handlers, programmers can prevent program crashes and ensure that the system continues to operate correctly even in the face of unexpected events.

Last updated:

Review Summary

3.96 out of 5
Average of 100+ ratings from Goodreads and Amazon.

Object-oriented Programming with C++ receives mixed reviews. While some readers praise it as a great resource for learning OOP concepts in C++, others criticize it for containing errors and mistakes in the programming examples. The book is recommended by professors for computer courses and appreciated for its straightforward explanations. However, some readers suggest seeking alternative sources to learn C++ basics. Despite the criticisms, many reviewers rate it highly, with an overall rating of 3.96 out of 5 based on 271 reviews. Some readers find it useful for definitions and theoretical explanations.

Your rating:

About the Author

E. Balagurusamy is an Indian author and educator known for his contributions to computer science education. He has written numerous textbooks on programming languages, including C, C++, and Java. Balagurusamy has served as a professor and held administrative positions at various educational institutions in India. His books are widely used in undergraduate and postgraduate computer science courses across the country. With a career spanning several decades, Balagurusamy has played a significant role in shaping computer science education in India. His writing style is often praised for its clarity and accessibility, making complex programming concepts easier for students to grasp.

Download PDF

To save this Object-oriented Programming with C++ summary for later, download the free PDF. You can print it out, or read offline at your convenience.
Download PDF
File size: 0.23 MB     Pages: 16

Download EPUB

To read this Object-oriented Programming with C++ summary on your e-reader device or app, download the free EPUB. The .epub digital book format is ideal for reading ebooks on phones, tablets, and e-readers.
Download EPUB
File size: 3.00 MB     Pages: 16
0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Get personalized suggestions
Ratings: Rate books & see your ratings
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 10
📜 Unlimited History
Free users are limited to 10
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Apr 7,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Appearance
Loading...
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →