390 likes | 411 Views
VERY IMPORTANT. Rules must be followed by all, no exception unless you have an acceptable excuse! Talking to your TA with bad attitude is not acceptable and will result in ZERO in your term work.
E N D
VERY IMPORTANT • Rules must be followed by all, no exception unless you have an acceptable excuse! • Talking to your TA with bad attitude is not acceptable and will result in ZERO in your term work. • The TA has the right to decide whether your code is copied or not according to your attitude in the discussion! • Review your code well before discussion, it is absolutely not the time to try remembering what each part of your code does! • Getting help from your friends or any one else to understand some topic is acceptable, but delivering identical or similar code blocks that you don't understand is prohibited, especially when you are not able to explain it well during discussions! (NEGATIVE GRADE) • You will discuss the code you have submitted on Acadox. Don't come up with new version to persuade your TA to discuss you from! • If you missed the discussion time(s) announced by your TA, you will get zero in the assignment, even if you have submitted it on Acadox. The discussion time is determined by your TA, not you! • Name your submitted file with your group(s): Gx_ID1_Gy_ID2_Gz_ID3, for example: G5_20170099_G2_20170022_G7_2017155 ... etc. Failing to name your submission in the correct format will result in ZERO! • We are all (DRs and TAs) doing our best to help you learn as much as you can. This is our target that we are dedicated to. So, you should respect our times and efforts.
Templates Edited by Dr. Mohammad Nassef CS-FCI-CU-EG m.nassef@fci-cu.edu.eg
Function Templates • Function template: a pattern for a function that can work with many data types • When written, parameters are left for the data types • When called, compiler generates code for specific data types determined in function call • Better than Function Overloading: • You need to create only one version of the function • Bug fixes will be in one place • But number of parameters will be fixed.
Function Template Example template prefix template <class T> T times10(T num) { return 10 * num; } generic data type type parameter
Function Template Example template <class T> T times10(T num) { return 10 * num; } • Call a template function in the usual manner: int ival = 3; double dval = 2.55; cout << times10(ival); // displays 30 cout << times10(dval); // displays 25.5
Function Template Notes • Can define a template to use multiple data types: template<class T1, class T2> • Example: template<class T1, class T2> // T1 and T2 will be double mpg(T1 miles, T2 gallons) // replaced in the { // called function return miles / gallons // with the data } // types of the // arguments
Function Template Notes • Function templates can be overloaded • Each template must have a unique parameter list template <class T> T sumAll(T num) ... template <class T1, class T2> T1 sumAll(T1 num1, T2 num2) ...
Function Template Notes • All data types specified in template prefix must be used in template definition • Function calls must pass parameters for all data types specified in the template prefix • Like regular functions, function templates must be defined before being called
Function Template Notes • A function template is a pattern • No actual code is generated until the function named in the template is called • A function template uses no memory • When passing a class object to a function template, ensure that all operators performed by the function template are defined or overloaded in the class definition
Where to Start When Defining Templates • Templates are often appropriate for multiple functions that perform the same task with different parameter data types • Develop function using usual data types first, then convert to a template: • add template prefix • convert data type names in the function to a type parameter (i.e., a T type) in the template • Remove any redundant versions of the function!
Class Templates • Classes can also be represented by templates. • When a class object is created, type information is supplied to define the type of data members of the class. • Unlike functions, classes are instantiated by supplying the type name (int, double, string, etc.) at object definition
Class Template Example template <class T> class grade { private: T score; public: grade(T); void setGrade(T); T getGrade() };
Class Template Example • Pass type information to class template when defining objects: grade<int> testList[20]; grade<double> quizList[20]; • Use as ordinary objects once defined
Class Templates and Inheritance • Class templates can inherit from other class templates: template <class T> class Rectangle { ... }; template <class T> class Square : public Rectangle<T> { ... }; • Must use type parameter T everywhere base class name is used in derived class
Introduction • If you have a static/dynamic array insidea class, then each object from that class will have its own copy of this internalarray. • How can you access (read/write) the elements inside this internal array? • You will need two setter/getter functions that can write/read the value at a specific index!
Overloaded [] Operator • Why? • Can create classes that behave like arrays, • Why? • Need to initialize the array elements • Can provide boundary-checking on subscripts • Can perform hidden dynamic re-allocation • Can use templates to dynamically determine the array data type • Must consider constructor, destructor • Overloaded operator[] returns a reference to object, not a copy of the object.
How to access the elements of an array inside some object? Try Program On Acadox Code Tab Lecture16-IntArray-version-0 Accessing elements of array inside object
Setter/Getter of Internal Array Elements • Inside main:
Try Programs 14.12 14.13 These programs make use of the IntArray.h and IntArray.cpp files Overloading the [] Operator
Setter/Getter →Operator [] • These setter/getter functions can be simply replaced by the overloaded operator []
Using Operator [] in main • Old main function: • New main function:
Converting the Custom IntArray class to template class? • Try the IntArray class (illustrated in Problems 14.12 and 14.13). • Convert that class into a generic class named MyArray. • Use class templates to allow the users creating objects from that class using character, int, or double data types.
Template of an Array class Teach Yourself C++ in 21 Days 5th Edition.pdf: Day 19 - Page 663 – Listing 19.1
T& operator[](intoffSet) { return pType[offSet]; } When an instance of an integer array is defined: • T is replaced with an integer, • The operator= that is provided to that array returns a reference to an integer. • This is equivalent to the following: int& operator[](intoffSet) { return pType[offSet]; }
T& operator[](intoffSet) { return pType[offSet]; } When an instance of an Animal array is defined: • The operator= provided to the Animal array returns a reference to an Animal • This is equivalent to the following: Animal& operator[](intoffSet) { return pType[offSet]; }
Template of an Array class Teach Yourself C++ in 21 Days 5th Edition.pdf: Day 19 - Page 665 – Listing 19.2
Full implementation Teach Yourself C++ in 21 Days 5th Edition.pdf: Day 19 - Page 665 – Listing 19.2
Teach Yourself C++ in 21 Days 5th Edition.pdf: Day 19 - Page 665 – Listing 19.2
an Array template is defined • then, it is used to instantiate 2 Array objects of types int and Animal. Teach Yourself C++ in 21 Days 5th Edition.pdf: Day 19 - Page 665 – Listing 19.2
Passing template objects to functions • If you want to pass an Array object to a normal function, you mustpass a particular instance of the class, not a template. void SomeFunction(Array<int>&); // ok void SomeFunction(Array<T>&); // error! void SomeFunction(Array &); // error! because there is no class Array—only the template and the instances.
Templates and Friends • Template classes can declare three types of friends: • A non-template friend class or function • A general template friend class or function • A type-specific template friend class or function • Please refer to Day 19 for more details. Teach Yourself C++ in 21 Days 5th Edition.pdf: Day 19
VERY IMPORTANT • Rules must be followed by all, no exception unless you have an acceptable excuse! • Talking to your TA with bad attitude is not acceptable and will result in ZERO in your term work. • The TA has the right to decide whether your code is copied or not according to your attitude in the discussion! • Review your code well before discussion, it is absolutely not the time to try remembering what each part of your code does! • Getting help from your friends or any one else to understand some topic is acceptable, but delivering identical or similar code blocks that you don't understand is prohibited, especially when you are not able to explain it well during discussions! (NEGATIVE GRADE) • You will discuss the code you have submitted on Acadox. Don't come up with new version to persuade your TA to discuss you from! • If you missed the discussion time(s) announced by your TA, you will get zero in the assignment, even if you have submitted it on Acadox. The discussion time is determined by your TA, not you! • Name your submitted file with your group(s): Gx_ID1_Gy_ID2_Gz_ID3, for example: G5_20170099_G2_20170022_G7_2017155 ... etc. Failing to name your submission in the correct format will result in ZERO! • We are all (DRs and TAs) doing our best to help you learn as much as you can. This is our target that we are dedicated to. So, you should respect our times and efforts.