-
Recursion–Functions–STRUCTURED PROGRAMMING Course Notes
Recursion A recursive function calls itself, either directly or indirectly. A recursive function knows how to solve only the simplest case(s), or so-called base case(s). If the function is called with a base case, the function simply returns a result. If the function is called with a more complex problem, the function typically divides the problem into two conceptual pieces–a piece that the function knows how to do, and a piece that it does not know how to do. To make recursion feasible, the latter piece must resemble the original problem, but be a slightly simpler or slightly smaller version of it. For recursion, to terminate, the sequence of recursive…
-
Function Templates–Functions–STRUCTURED PROGRAMMING Course Notes
Function Templates Overloaded functions typically perform similar operations that involve different program logic on different data types. If the program logic & operations are identical for each data type, overloading may be performed more compactly & conveniently using function templates. Given the argument types provided in calls to a function template, C++ automatically generates separate function template specializations to handle each type of call appropriately. All function template definitions begin with the ‘template‘ keyword followed by a template parameter list to the function template enclosed in angle brackets ( <> ). The formal type parameters are placeholders for fundamental types or user-defined types. These placeholders are used to specify the…
-
Function Overloading–Functions–STRUCTURED PROGRAMMING Course Notes
Function Overloading C++ enables several functions fo the same name to be defined, as long as these functions have different sets of parameters (a.k.a.–different signatures). This capability is called function overloading. When an overloaded function is called, the C++ compiler selects the proper function by examining the number, types, and order of the arguments in the call. Overloaded functions are distinguished by their signatures (function name & parameter types). The compiler encodes each function identifier with the number & types of its parameters to enable type-safe linkage. Type-safe linage ensures that the proper overloaded function is called and that the types of the arguments conform to the types of the…
-
Unary Scope Resolution Operator–Functions–STRUCTURED PROGRAMMING Course Notes
Unary Scope Resolution Operator C++ provides the unary scope resolution operator ( :: ) to access a global variable when a local variable of the same name is in scope. This makes it possible to declare local & global variables of the same name. The unary scope resolution operator cannot be used to access a local variable of the same name in an outer block. A global variable can be accessed directly without the unary scope resolution operator if the name of the global variable is NOT the same as that of a local variable in scope. Tip: Always using the unary scope resolution operator ( :: ) to refer…
-
Default Arguments–Functions–STRUCTURED PROGRAMMING Course Notes
Default Arguments When a function is called repeatedly with the same arguments for a particular parameter, you can specify that such a parameter has a default argument. (default value to be passed to that parameter). When a program omits an argument for a parameter with a default argument, the compiler inserts the default value of that argument to be passed to the function call. Default arguments must be the rightmost (trailing) arguments in a function’s parameter list. Default arguments are typically specified in the function prototype. Note: Using default arguments can simplify writing function calls. However, some programmers feel that explicitly specifying all arguments is clearer. Note: If the default…
-
Inline Functions, References, & Reference Parameters–Functions–STRUCTURED PROGRAMMING Course Notes
In C++, an empty parameter list is specified by writing either ‘void’ or nothing in parenthesis. Ex: (void) -or- () Inline Functions Inline Functions–C++ provides inline functions to help reduce function call overhead–especially for small functions. Placing the qualifier ‘inline‘ before a function’s return type in the function definition “advises” the compiler to generate a copy of the function’s code in place to avoid a function call. Note: Any change to an ‘inline’ function requires all clients of the function to be recompiled. This can be significant in some program development & maintenance situations. Tip: The ‘inline’ qualifier should be used only with small, frequently used functions. Using ‘inline’ functions…
-
Function Call Stack & Activation Records–Functions–STRUCTURED PROGRAMMING Course Notes
Function Call Stack & Activation Records Stacks are known as ‘last-in, first-out‘ (LIFO) data structures–the last item pushed (inserted) on the stack is the first item popped (removed) from the stack. The function call stack supports the function call/return mechanism, & the creation, maintenance and destruction of each called function’s automatic variables. Each time a function calls another function, a stack frame, or an activation record, is pushed onto the stack containing the return address that the called function needs to return to the calling function, and the function call’s automatic variables & parameters. The stack frame exists as long as the called function is active. When the called function…
-
Scope Rules–Functions–STRUCTURED PROGRAMMING Course Notes
Scope Rules Unlike automatic variables, static local variables retain their values when the function in which they’re declared returns to its caller. An identifier declared outside any function or class has global namespace scope. Labels are the only identifiers with function scope. Labels can be used anywhere in the function in which they appear, but cannot be referenced outside the function body. (Labels are followed by a colon. ‘:’ ) Identifiers declared inside a block have local scope. Local scope begins at the identifiers declaration & ends at the terminating right brace (‘}’) of the block in which the identifier is declared. Identifiers in the parameter list of a function…
-
Storage Classes–Functions–STRUCTURED PROGRAMMING Course Notes
Storage Classes A storage class defines the scope (visibility) and life-time (existence) of variables and/or functions within a C++ program. C++ provides five storage-class specifiers: auto register extern mutable static An identifier’s storage class determines the period during which that identifier exists in memory. An identifier’s scope is where the identifier can be referenced in a program. And identifier’s linkage determines whether an identifier is known only in the source file where it’s declared, or across multiple files that are compiled then linked together. Note: Identifiers in C++ are the names assigned to variables and functions. The valid identifiers are declared using the alphabets from A to Z, a to…
-
Enumeration–Functions–STRUCTURED PROGRAMMING Course Notes
Enumeration Enumeration–an enumeration, introduced by the keyword ‘enum‘ and followed by a type name is a user-defined type. An enumeration is a set of named integer constants represented by identifiers. The values of these enumeration constants start at 0, unless specified otherwise, and increment by 1. A popular enumeration is: enum Months { Jan = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }; where: ‘enum‘ is the ‘keyword‘ ‘Months’ is the ‘identifier‘ ‘JAN’ thru ‘DEC’ are the ‘enumeration constant names‘ …which creates user-defined type ‘Months’ with enumeration constants representing the months of the year. The first value is explicitly specified to start at 1, so…