Ôîðóì » C/C++ äëÿ íà÷èíàþùèõ (C/C++ for beginners) » Template for class » Îòâåòèòü

Template for class

BasicNewbie1: [pre2]#include <iostream> #include <string> using namespace std; template< class T > class Employee{ private: T EmployeeID , EmployeeSalary; public: T Employee( T theID , T theSalary ){ EmployeeID = theID; EmployeeSalary = theSalary; } }; template< class T > class Student{ private: public: T Student(){} }; int main(){ Employee <> theEmployee( 2 , 3000 ); Student <> theStudent (); system( "pause" ); return 0; }[/pre2] what i done so far and this the question given And here is the question given Create a class template for a class that holds an object and the number of data elements in the object. For example, if an Employee class has two data elements, an ID number and a salary, then the class template holds the number 2 and an Employee object; if a Student class contains 12 data elements, then the class template holds 12 and a Student object. Write the code for standard input function for the object that displays a message on the screen – “You will be ask to enter X items” – where X is the number of data elements. Write a main() function that tests your template class with an integer and two programmer-defined classes am i doing correctly until now?

Îòâåòîâ - 34, ñòð: 1 2 All

Ñûðîåæêà: No your code is incorrect and does not correspond to the assignment. First of all constructors have no return types. So you may not write as for example T Student(){} Also your definitions of the classes have no default template arguments. So you may not write Student <> theStudent (); I think that according to the assignment the template class should be defined with two template parameters: a type template parameter for denoting an object and a non-type template parameter for the number of members in the type of the object. Thus the definition of the template class should look the following way [pre2] template <class T, size_t N> class Holder { private: T object; size_t count; public: /* some methods of the class };[/pre2]

BasicNewbie1: the class Holder if in my assignment . the class should be Student? the size_t count , is it T count in the code . or should be int count in the code? andStudent <> thestudent() i sjust a part of code that i didn't finish because I don't know what parameter should pass inside. so for my employee class. am i doing correctly?

Ñûðîåæêà: As far as I understand your assignment you have to "Create a class template for a class that holds an object and the number of data elements in the object" That is the class template will contain either an object of type Employee and the number of data members in this class or class Student and the number of data members of the class. I showed an example of how the template class should look.


BasicNewbie1: [pre2]#include <iostream> #include <string> using namespace std; template< class T , int numOfData > class Employee{ private: T Employee; int count; T EmployeeID , EmployeeSalary; public: T Employee( T theID , T theSalary ){ EmployeeID = theID; EmployeeSalary = theSalary; } }; template< class T , int numOfData > class Student{ private: T Student; int count; public: T Student(){} };[/pre2] mind to show how the output look like? am i correct for the code above like what you said just now?

Ñûðîåæêà: I think that Employee and Student shall not be template classes. It is the class Holder that shall be a template class and shall be instantiated either with Employeee or Stident.

BasicNewbie1: [pre2]#include <iostream> #include <string> using namespace std; template< class T , int numOfData > class Holder{ private: T object; int count; public: }; class Employee{ private: int EmployeeID; double EmployeeSalary; public: Employee( int theEmployeeID , double theEmployeeSalary ){ EmployeeID = theEmployeeID; EmployeeSalary = theEmployeeSalary; } }; class Student{ private: int numOfDataElements; public: Student(); }; int main(){ Employee <int> theEmployee( 2 , 3000 ); Student <> theStudent (); system( "pause" ); return 0; }[/pre2] what do you mean shall be instantiated? isn't Employee :: public Holder ? that is inheritance?

Ñûðîåæêà: Class Employee shall have default constructor because tenplate class Holder has data member for which default constructor shall be called. I meant that main has to have something as Holder<Employee, 2> h1; Holder<Student, 12> h2; and so on.

BasicNewbie1: [pre2]#include <iostream> #include <string> using namespace std; template< class T , int numOfData > class Holder{ private: T object; int count; public: }; class Employee{ private: int EmployeeID; double EmployeeSalary; public: Employee(){ EmployeeID = 0; EmployeeSalary = 0.00; } Employee( int theEmployeeID , double theEmployeeSalary ){ EmployeeID = theEmployeeID; EmployeeSalary = theEmployeeSalary; } }; class Student{ private: int numOfDataElements; public: Student(){ numOfDataElements = 0; } Student( int numOfData ){ numOfDataElements = numOfData; } }; int main(){ Holder <Employee , 2> h1; Holder <Student , 12> h2; system( "pause" ); return 0; }[/pre2] compile successful. isn't correct already? and at the output should look like? or no output for this question actually ? jus tlet us to get understand for the template? thanks for your fast response .

Ñûðîåæêà: Data member count of class Holder is not initialized. I think you can add an explicit default constructor to Holder that will initialize count with non-type template parameter. Also you have to add public function member that will issue the message "“You will be ask to enter X items”". Also each class shall have a methof for inputing values to their data members. This method shall have a common name for the both classes.

BasicNewbie1: This method shall have a common name for the both classes? what this mean actually? and the "“You will be ask to enter X items”". is a function ? which mean example: [pre2] void inputItems(){ int items = 0; cout << "Enter X items : " ; cin >> items; }[/pre2] then how the function will be call out since we only call this in main? [pre2]int main(){ Holder <Employee , 2> h1; Holder <Student , 12> h2; system( "pause" ); return 0; }[/pre2]

Ñûðîåæêà: Read your assignment one more. Class Holder has to have a method that will issue the message and call a method of data member object that will provide input of some values for its data members.

BasicNewbie1: . Write the code for standard input function for the object that displays a message on the screen – “You will be ask to enter X items” – where X is the number of data elements. the question didn't mention about the function should put in class Holder? so do you mean the void inputItems should be in public member of class Holder?

Ñûðîåæêà: Well you can ask the question to your senior to make clear what did he mean.

BasicNewbie1: err . the question is given by the campus from university of wollogong . we always complain that the question given by them is always foolish-ing us . that's why i keep asking from the website to get some understanding from the code given . erm. mind u ? or u also getting blur? haha

Ñûðîåæêà: I see ths sense when an object of the template class calls a method of its member that either has type Employee or Student. It is the template class that knows how many elements the subobject contains. So I think that some method of the template class shall isuue the message and then call an input method of its subobject.

BasicNewbie1: so do you mean that if i call the Holder in the main . then should out a input message that call user enter for the X item and then return to the Employee or Student object for the subobject contain? so the input message isn't should insert in the constructor of Holder ? because if like what you said earlier put into the public member function , it's no point to call the message out and then return? or else should be like this? [pre2]template< class T , int numOfData > class Holder{ private: T object; int count; public: Holder(){ count = 0; } void inputItems(){ int items = 0; cout << "Enter X item : "; cin >> items; } };[/pre2] then how should be call the function out? because in normal way we cannot put older theHolder; isn't correct?

Ñûðîåæêà: I think that it is required something as [pre2] template< class T , int numOfData > class Holder { private: T object; int count = numOfData; public: //Holder() { count = NumOfData; } // The consttructor is not required if the compiler supports the initialization of class members in class definition void inputItems() { std::cout << "You will be asked to enter " << count << " items" << std::endl; object.inputItems(); } }; . [/pre2]

BasicNewbie1: err . but now i cannot see got any input for your count? you just output it ? because user will be enter the count i think?

Ñûðîåæêà: I already showed you. [pre2] int main() { Holder <Employee , 2> h1; Holder <Student , 12> h2; h1.inputItems(); h2.InputItems(); system( "pause" ); return 0; }[/pre2] The only think that you have to do now is to wtite method inputItems for each class that used as template argument fo Holder. count stores the value of non-type template parameter, It shhall not be changed. In fact you can declare it with cons qualifier. Of course you should use valid values instead of 2 and 12 that is the number of items that will be entered in each class.

BasicNewbie: const qualifer? isn't mean that my numOfData should be in const value? and after i insert the method inputItems for each class my function inputItems foe each class will be like this [pre2]class Employee{ private: int EmployeeID; double EmployeeSalary; public: Employee(){ EmployeeID = 0; EmployeeSalary = 0.00; } Employee( int theEmployeeID , double theEmployeeSalary ){ EmployeeID = theEmployeeID; EmployeeSalary = theEmployeeSalary; } void inputItems(){}; };[/pre2] u mean the number 2 and number 12 is input by user? or ?

Ñûðîåæêà: Number 2 is fixed for your class Student. It is the number of class members that will get values in inputItems.

BasicNewbie: beside that . how i show out what the object pass in? JUST EXAMPLE: Object : Employee You will be asked to enter 2 items isn't the output should like this too?

BasicNewbie: ya i know because of the count = numOfData so is it correct? lol

Ñûðîåæêà: BasicNewbie ïèøåò: ya i know because of the count = numOfData so is it correct? lol Yes, you are right. When an object of Holder is created its template arguments are specified including the number of members of a class used as the template argument

BasicNewbie: Then how I call the class name out ? I tried a lot of code but fail

Ñûðîåæêà: I have not understood your question. In fact I showed already the full code. You only need to write member function readItems for each class.

BasicNewbie: I mean that how I show out the object that I pass to the template? Sohow to display out for the object?

Ñûðîåæêà: I already wrote all code except the member function readItems of the classes. Reread the thread attentively..

BasicNewbie: readItems is when i enter the number 2 in the inputItems . so i can do a looping to call user want to enter what the 2 items are? mind that can u provide what the output should look like ? like that i can get it understand easily .. can?

Ñûðîåæêà: One more classes Student and Employee shall have a method with the same name for both classes. You have to call this method.

BasicNewbie: i can't get what you mean for it because i not really understand for the last point that u explaining to me that i asking what should the progrma output look like? sorry for it because my english not so well . and the readItems() isn't read the [pre2]Holder <Employee , 2> h1; Holder <Student , 12> h2;[/pre2] from the main? if 2 so the readItems() from the function will ask user to enter 2 items for it? if 12 so the readItems() will call user to enter 12 times for the items?

Ñûðîåæêà: One more in each class write a method for entering values for its members. I wil not repeat this any more.

BasicNewbie: [pre2]#include <iostream> #include <string> using namespace std; template< class T , int numOfData > class Holder{ private: T object; int count; public: Holder(){ object = obj; count = numOfData; } void inputItems(){ cout << typeid(object).name() << endl; cout << "You will be asked to enter " << count << " items" << endl << endl; object.inputItems(); } void readItems(){ object.readItems(); }; }; class Employee{ private: int EmployeeID; double EmployeeSalary; public: Employee(){ EmployeeID = 0; EmployeeSalary = 0.00; } Employee( int theEmployeeID , double theEmployeeSalary ){ EmployeeID = theEmployeeID; EmployeeSalary = theEmployeeSalary; } void inputItems(){ cout << "Enter Employee ID : "; cin >> EmployeeID; cout << "Enter Employee Salary : "; cin >> EmployeeSalary; }; void readItems(){ cout << "\nEmployee ID : " << EmployeeID << endl << "Employee Salary : " << EmployeeSalary << endl << endl; } }; class Student{ private: int numOfDataElements; public: Student(){ numOfDataElements = 0; } Student( int numOfData ){ numOfDataElements = numOfData; } void inputItems(){}; }; int main(){ Student student; Holder <Employee , 2> h1; Holder <Student , 12> h2; h1.inputItems(); h1.readItems(); h2.inputItems(); system( "pause" ); return 0; }[/pre2] so for my class Employee. am i doing correctly for all? and beside that . i have a seriously question to ask u ya . if i comment out for the constructor for each class . the program still work? so the constructor actually is unused ?

Ñûðîåæêà: I showed you already how class Holder should look. [pre2] template< class T , int numOfData > class Holder { private: T object; int count = numOfData; public: //Holder() { count = NumOfData; } // The consttructor is not required if the compiler supports the initialization of class members in class definition void inputItems() { std::cout << "You will be asked to enter " << count << " items" << std::endl; object.inputItems(); } }; . [/pre2] So the only thing that you have to do is to define classes Student and Employee and inside them define a method inputItems. That is all.



ïîëíàÿ âåðñèÿ ñòðàíèöû