Changes

Jump to: navigation, search

Project A3 20141 - OOP344

1,776 bytes added, 10:22, 3 April 2014
m
no edit summary
{{OOP344 Index Extended | 20141}}
 
= Introduction =
Our third In this assignment , you will have you construct an integer holding linked list, adapt it into a templated linked list, then create an a '''bonus''' object editor utilizing the list. You will use  == Testing ==Use the testing package linked [httphttps://replacescs.senecac.on.ca/~hasan.kamal-al-deen/public_resources/oop344/a3test_apr032014.me zip here(Updated April 3 2014)] to test your assignment. The linked lists have automated tests; Please read the rest of the assignment has some automated tests and some visual testsnotes/comments in a3test.cpp. Please note the filename and test number conveniently  == Expectations ==Test numbers are provided in at the section headers for end of each required class/functionspec heading, as are file names.
; SANITY NOTE: You will be writing a number of classes and functions. [[Sanity_20141_-_OOP344 | Please remember to '''sanitize''' your code as you go along.; What is code sanity?: The idea behind code sanity is to keep the code clean and the logic strong '''at all times'''. This has 2 main advantages.# If your code is logically correct '''at all times''' then you can be sure that if there is a problem, it has been caused by the latest set of alterations.# It makes debugging '''much much easier''' both for yourself and for '''anyone helping you'''; So how do I keep my code sane?: By following these simple steps:# Keep the code nicely '''formatted''' at '''all times'''. This makes it easy to see the logical structure of your program at a glance and to follow the logic of it. Experienced programmers do '''NOT''' look for lines of code, they look for '''blocks''' denoted by '''indents'''. Train yourself to do the same.<br/>'''NOTE:''' If you are using an editor or environment that makes read this hard for you, '''start by getting a better environment!'''<br/>Windows and visual studio are an excellent combination and provided for free by Seneca. On Linux, your options are netbeans and sublime. The debugging experience is simpler on Windows for our assignments however.<br/>Also note, on visual studio, you can have the editor '''automatically''' format your code nicely by pressing the following combinations in sequence:<br/>'''CTRL-K, CTRL-D'''# Do not begin writing the next feature before the '''last feature''' is working! This is of '''paramount importance'''! By ensuring that your code is working ('''use the tests, specs, and your common sense!'''), you can save versions of your assignment at specific points in time and '''know''' that if a problem arises, '''it must be caused by your latest set of changes!'''# Use a '''consistent''' naming convention for all member variables and '''another''' convention for local variables.<br/>This makes it easy for you and for '''anyone helping you''' to tell at a glance (ie '''WITHOUT''' looking at your header) which variables are local, member, etc...<br/>Too often I see conventions either not used, not used consistently, or '''mixed'''. Of the three cases, '''the third is the worst'''.<br/>Aim to '''ALWAYS''' use consistent naming conventions, whatever they may beSANITY]].<br/>An easy set of conventions is as follows:#; Private/Protected Member Variable/Function: _underscoreCamelCase#; Public Member Variable/Function: regularCamelCase#; Local Variable/Function Parameter/Global Function: regularCamelCase#; Public #Define (ie should be used by external code): SCREAMING_CAPS#; Private #Define (ie should only be internally used): _UNDERSCORE_SCREAMING_CAPS
When you are finished the assignment, you will have created the following files:
* intlist.cpp
* list.h
 
* Will update with part 3 soon.
== Part 1: Integer Linked List ==
For this part, you will build Build the classes '''IntList''' and '''IntListNode''' . Place the headers in the files '''intlist.h''' and '''the implementation in intlist.cpp'''. These two classes compose a basic implementation of form an integer linked list. Please see the following sections on the exact specifications of these classes.
=== Class: IntListNode, Files: [intlist.h, intlist.cpp], TestNumber: 0 ===An IntListNode is a Integer linked list node, as such it holds an integer value and a pointer to an IntListNode that . Node is the next node considered last in the list. If the if its next link pointer is NULL then the current node is considered the '''last node in the list'''.<br/>Note that the next property of this class has a public getter and a protected setter; this is intentional as client code should not mess with the '''structure''' of our linked listsections below.<br/>While this class is only used by You may need to make IntList, it is expected to have a set friend of its own functionalitythis class.
It is expected that ==== Recommended Members ====* An integer member to hold the node'''class declaration''' for this class lie in '''intlists value.h''' and * A pointer to the definition code lie next node in '''intlist.cpp'''the list.
In most implementations, you will need ==== Public Functions ====; Constructor: Accepts two arguments::* Integer to make the class '''IntList''initialize node' s value. Defaults to a default constructed int.:* Pointer to next node in list. Defaults to NULL.; Copy Constructor: Initializes internal value as a friend copy of this class to access the protected 'source's internal value. Sets this object's next setterpointer to NULL.; Standard Assignment Operator: Assigns source's internal value to the current object's internal value. Sets this object's next pointer to NULL. Does not alter the object in the case of self-assignment. Returns a reference to the current object.
The exact specs follow; val:Val getter. Const function. Does not accept parameters. Returns internal value.; val: Val setter. Receives an int. Sets internal value to received int. Does not return anything.
==== Internal Variables ====Please note that ; next: Next getter. Const function. Does not accept parameters. Returns pointer to the names provided in all '''Internal Variables''' sections are suggested but '''not mandatory'''next node.
; int _val=== Class: Held integer valueIntList, Files [intlist.h, intlist.cpp], Test Number: 0 ===; Integer linked list. Uses IntListNode* _next: Pointer to the next as a node in the listclass.
==== Protected Functions Recommended Members ====; void next* Pointer to head node in list* Current size (IntListNode*number of nodes): Next setter. Sets the internally held next pointer to the incoming pointer.of list
==== Public Functions ====
; IntListNode(Constructor: Does not accept parameters. Initializes list to safe empty state. ; size: Size getter. Const function. Does not receive parameters. Should return number of nodes in list.; head: Head getter. Const function. Returns pointer to head node in list. ; push: Adds a new node to the '''end of the list'''. I'll say that again, '''END OF THE LIST'''. Receives an int v = parameter. The new node's value should be set to the received int().; pop: Destroys the '''last node in the list'''. I'll say that again, IntListNode* n = NULL)'''LAST NODE IN THE LIST'''. Does not receive any arguments. Does not return anything.; clear: ConstructorRemoves all nodes in the list. Note Has no effect if the default valueslist is empty. Does not accept parameters. Does not return anything. Initializes  ; Destructor: Should ensure that all memory allocated by the internally held value list has been deallocated. You are encouraged to v and use the next pointer functions available to nyou. ; IntListNode(const IntListNode& src)Standard Assignment Operator: Copy constructorClears this list of all nodes. Then, refills list with the same number of nodes as in the source list. Value of each new node should equal the value of corresponding node in source list. Should not alter object in the case of self-assignment. Should initialize return a reference to the internally held value current object.; Copy Constructor: Initializes object to safe state then copies source list into current list. Similar to src's internally held valueassignment operator. Should initialize  == Part 2: Templated Linked List =='''nextNOTE:''' Finish part 1 before working on this part. Build the templated linked list node class ListNode<T> and the templated linked list class List<T> in the file list.h. These two classes are almost identical to IntListNode and IntList, except that they are templated. In the specs below, note the sections that are marked <big><u><i>Important</i></u></big>. Those sections will have more than just a template parameter change from the int version of the list. === Class: ListNode<T>, Files: [list.h], Test Number: 1 ===Templated ListNode class. Similar to IntListNode but templated to hold any type. The syntax for prototyping a templated class is: template <typename T> SomeClass; ==== Recommended Members ====* Template type member to hold the value.* Pointer to next node in list. ==== Public Functions ====These functions are similar to their IntListNode counterparts. ; Constructor: Accepts two arguments.:* <big><u><i>Important</i></u></big> const T reference to initialize node's value. Defaults to a default constructed T.:* Pointer to next node in the list. Defaults to NULL.; Copy Constructor: Initializes internal value as a copy of the source's internal value. Sets this object's next pointer to NULL.; Standard Assignment Operator: Assigns source's internal value to the current object's internal value. Sets this object's next pointer to NULL. Does not alter the object in the case of self-assignment. Returns a reference to the current object. ; val: Val getter. Const function. Does not accept parameters. Returns internal value.; IntListNode& operatorval: Val setter. <big><u><i>Important</i></u></big> receives a const T reference. Sets internal value to received reference. Does not return anything. ; next: Next getter. Const function. Does not accept parameters. Returns pointer to next node. === Class: List<T>, Files [list.h], Test Number: 1 ===A templated linked list class. Similar to IntList. Uses ListNode<T> as a node class. ==== Recommended Members ====* Pointer to head node in list* Current size (const IntListNode& srcnumber of nodes)of list ==== Public Functions ====; Constructor: Assignment operatorDoes not accept parameters. Initializes list to safe empty state. ; size: Size getter. Const function. Does not receive parameters. Should set return number of nodes in list.; head: Head getter. Const function. Returns pointer to head node in list. ; push: Adds a new node to the internally held value to src's internally held value. Should set ''end of the list''next'. I'll say that again, ' to ''END OF THE LIST'NULL''. <big><u><i>Important</i></u></big> receives a const T reference. The new node's value should be set to the received reference. Should do ; pop: Destroys the '''last node in the list'NOTHING''. I' in the case of ll say that again, '''self-assignmentLAST NODE IN THE LIST''' (ie IntListNode x. Does not receive any arguments. Does not return anything.; x = xclear: Removes all nodes in the list. Has no effect if the list is empty. Does not accept parameters. Does not return anything. ;)Destructor: Should ensure that all memory allocated by the list has been deallocated. You are encouraged to use the functions available to you. ; ~IntListNode()Standard Assignment Operator: DestructorClears this list of all nodes. Then, refills list with the same number of nodes as in the source list. As this Value of each new node should equal the value of corresponding node does in source list. Should not allocate any memory, this function can remain emptyalter object in the case of self-assignment. Should return a reference to the current object.; Copy Constructor: Initializes object to safe state then copies source list into current list. Similar to assignment operator.
; int val() const: Val getter. Returns == Submission ==Please only submit '''ONCE YOUR CODE SUCCESSFULLY PASSES ALL TESTS!''' This includes the value internally held.; void val(int): Val setter. Sets '''COMMON SENSE TEST''' which is the internally held value test that you perform '''yourself''' on your own code to ensure that it matches with what is required in the incoming valuespec.
; IntListNode* next() constSection A, C: Next getterPlease submit via blackboard. Returns the internally held next pointer; Section B: Please see your instructor's specific instructions on how to submit.

Navigation menu