C++ programming

50
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 14: Overloading and Templates

description

I'm not sure

Transcript of C++ programming

  • C++ Programming: Program Design IncludingData Structures, Fourth EditionChapter 14: Overloading and Templates

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*ObjectivesIn this chapter, you will:Learn about overloadingBecome aware of the restrictions on operator overloadingExamine the pointer thisLearn about friend functions

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Objectives (continued)Explore the members and nonmembers of a classDiscover how to overload various operatorsLearn about templatesExplore how to construct function templates and class templates

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Why Operator Overloading is NeededConsider the following statements:

    Which of the following would you prefer?

    Operator overloading: extend definition of an operator to work with a user-defined data type

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Why Operator Overloading is Needed (continued)The only built-in operations on classes are assignment and member selectionOther operators cannot be applied directly to class objectsC++ allows you to extend the definitions of most of the operators to work with classes

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Operator OverloadingCan overload most C++ operatorsCannot create new operatorsMost existing operators can be overloaded to manipulate class objectsWrite an operator function to overload an operatorUse reserved word operatorExample: write a function called: operator>=

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Syntax for Operator FunctionsThe syntax of an operator function heading:

    The operator function is value-returningoperator is a reserved wordTo overload an operator for a class:Include operator function in the class declarationWrite the definition of the operator function

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading an Operator:RestrictionsCannot change precedence or associativityDefault arguments cannot be usedCan be used in regular functions/methodsCannot change number of argumentsCannot create new operatorsCannot overload: . .* :: ?: sizeofHow operator works with built-in types remains the sameCan overload for user-defined objects or for a combination of user-defined and built-in objects

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Pointer thisEvery object of a class maintains a (hidden) pointer to itself called thisWhen an object invokes a member functionthis is referenced by the member function

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Friend Functions of ClassesFriend function (of a class): nonmember function of the class that has access to all the members of the classTo make a function friend to a classReserved word friend precedes the function prototype in the class definition

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Definition of a friend Functions"friend" doesnt appear in function definitionWhen writing the friend function definitionThe name of the class and the scope resolution operator are not used

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Operator Functions as Member Functions and Nonmember FunctionsTo overload (), [], ->, or = for a class, function must be a member of the classIf op is overloaded for opOverClass:If the leftmost operand of op is an object of a different type, the overloading function must be a nonmember (friend) of the classIf the overloading function for op is a member of opOverClass, then when applying op on objects of type opOverClass, the leftmost operand must be of type opOverClass

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading Binary OperatorsIf # represents a binary operator (e.g., + or ==) that is to be overloaded for rectangleTypeOperator can be overloaded as either a member function of the class or as a friend function

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Binary Operators as Member Functions

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Binary Operators as Nonmember Functions

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Stream Insertion () OperatorsConsider the expression: cout
  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Stream Insertion Operator (
  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Stream Extraction Operator (>>)

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Assignment Operator (=)

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading Unary OperatorsTo overload a unary operator for a class: If the operator function is a member of the class, it has no parametersIf the operator function is a nonmember (i.e., it is a friend function), it has one parameter

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the ++ and -- OperatorsGeneral syntax to overload the pre-increment operator ++ as a member function:

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the ++ and -- Operators (continued)General syntax to overload the pre-increment operator ++ as a nonmember function:

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the ++ and -- Operators (continued)General syntax to overload the post-increment operator ++ as a member function:

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the ++ and -- Operators (continued)Syntax to overload the post-increment operator ++ as a nonmember function:

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Operator Overloading: Member versus NonmemberCertain operators must be overloaded as member functions and some must be overloaded as nonmember (friend) functionsThe binary arithmetic operator + can be overloaded either wayOverload + as a member functionOperator + has direct access to data members of one of the objectsNeed to pass only one object as a parameter

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Operator Overloading: Member versus Nonmember (continued)Overload + as a nonmember functionMust pass both objects as parametersCould require additional memory and time to make a local copy of the dataFor efficiency purposes, overload operators as member functions

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Classes and Pointer Member Variables (Revisited)Classes with pointer member variables must:Explicitly overload the assignment operatorInclude the copy constructorInclude the destructor

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Operator Overloading: One Final WordSuppose that an operator op is overloaded for a classsay, rectangleTypeWhenever we use op on objects of type rectangleType, the body of the function that overloads the operator op for the class rectangleType executesTherefore, whatever code you put in the body of the function executes

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Overloading the Array Index (Subscript) Operator ([])Syntax to declare operator[] as a member of a class for nonconstant arrays:

    Syntax to declare operator[] as a member of a class for constant arrays:

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Function OverloadingOverloading a function: several functions with the same name, but different parametersParameter types determine which function will executeMust provide the definition of each function

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*TemplatesTemplates: a single code body for a set of related functions (called function template) and related classes (called class template)Syntax: where Type is the type of the data and declaration is either a function declaration or a class declaration

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Templates (continued)The word class in the heading refers to any user-defined type or built-in typeType is called a formal parameter to the templateJust as variables are parameters to functionsData types are parameters to templates

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Function TemplatesThe syntax of the function template is: where Type is called a formal parameter of the templateType Specifies type of parameters to the function Specifies return type of the functionDeclares variables within the function

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Class TemplatesClass templates: a single code segment represents a set of related classes Called parameterized typesSyntax:

    A template instantiation can be created with either a built-in or user-defined typeThe function members of a class template are considered function templates

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Header File and Implementation File of a Class TemplatePassing a parameter to a function takes effect at run timePassing a parameter to a class template takes effect at compile timeCannot compile the implementation file independently of the client codeCan put class definition and definitions of the function templates directly in the client codeCan put class definition and the definitions of the function templates in the same header file

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Header File and Implementation File of a Class Template (continued)Another alternative: put class definition and function definitions in separate filesHowever, include directive to implementation file at the end of header fileIn either case, function definitions and client code are compiled togetherWe will put the class definition and the function definitions in the same header file

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*SummaryAn operator that has different meanings with different data types is said to be overloadedAny function that overloads an operator is called an operator functionoperator is a reserved wordOperator functions are value-returningOperator overloading provides the same concise notation for user-defined data types as for built-in data types

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Summary (continued)Only existing operators can be overloadedThe pointer this refers to the objectA friend function is a nonmember of a classIf an operator function is a member of a classThe leftmost operand of the operator must be a class object (or a reference to a class object) of that operators class

    C++ Programming: Program Design Including Data Structures, Fourth Edition

  • C++ Programming: Program Design Including Data Structures, Fourth Edition*Summary (continued)Every instance of an overloaded function has different sets of parametersTemplates:Function template: a single code segment for a set of related functionsClass template: a single code segment for a set of related classesCalled parameterized types

    C++ Programming: Program Design Including Data Structures, Fourth Edition