Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: template

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    4

    Mặc định template

    Mình muốn push nhân viên vào 1 cái stack nhưng làm đg làm thì bị bí không biết sao cả. mọi người coi dùm, nếu được sửa và góp ý dùm mình luôn nhé. mình mới coi template được 1 buổi nên ...

    PHP Code:
    #include <iostream>
    #include <iomanip>
    #include <cstring>
    #include <string>
    //#include <mem.h>  // visual k co library nay.kbiet bao gom trog cai nao
    using namespace std;

    /////////// headderfile .h ////////

    // ******* STACK.H *******// 
    //=====================//
    template <typename T>
    class 
    Stack
    {
    private:
        
    int size,top;
        
    *arr;

    public:
        
    Stack();
        
    Stack(int);
        ~
    Stack();
        
        
    int Empty();
        
    int Full();
        
    void Push(T&);
        
    void Pop(T&);
        
    };

    // ******* DATE.H *******// 
    //=====================//
    class Date
    {
        
    int day;
        
    int month;
        
    int year;
        
        
    int checkday(int) const;
    public:
        
    Date();
        
    Date(int,int,int);
        
    void print() const;
    };

    // ******* EMPLOYEE.H *******// 
    //===========================//
    //template <typename T>

    class Employee{
        
    Date date;
        
    char *Fname;
        
    char *Lname;
        
    char *Job;
        
    char *ID;
    public:
        
    Employee();
        
    Employee(int,int,int,char *,char *,char *,char *);
        
    //    void Input_Emp();
        
    void Display() const;
        
    //    friend void Sort_Emp_byname(); //sort then push into Stack
    //    friend void Sort_Emp_byID();
    };


    // ******* STACK.CPP *******// 
    //==========================//
    template <typename TStack<T>::Stack()
    {
        
    size 32;
        
    top  = -1;
        
    arr  = new T[32];
    }

    template <typename T
    Stack<T>::Stack(int n)
    {
        
    size n;
        
    top  = -1;
        
    arr  = new T[size];    
    }

    template <typename T>
    Stack<T>::~Stack()
    {
        
    delete []arr;
    }

    template <typename T
    int Stack<T>::Empty()
    {
        return 
    top == -1;


    template <typename T
    int Stack<T>::Full()
    {
        return 
    top == size 1;
    }

    template <typename T
    void Stack<T>::Push(&x)
    {
        if(
    Full())
            exit(
    0);
        
    memcpy(arr[top++],&x,sizeof(T));
    }

    template <typename T
    void Stack>::Pop(&x)
    {
        if(Empty())
            exit(
    0);
        
    memcpy(&x,arr[--top],sizeof(T));
    }

    // ******* DATE.CPP *******// 
    //==========================//
    Date::Date()
    {
        
    day   1;
        
    month 1;
        
    year  2009;
    }
    Date::Date(int d,int m,int y)
    {
        if(
    m>&& <=12)
            
    month m;
        else
        {
            
    month 1;
            
    cout<<"Invalid month (" << << ") set to 1"<<endl;
            
        }
        
    year y;
        
    day checkday(d);
        
        
    cout << " After set  ";
        print();
        
    cout<<endl;
    }

    void Date::print() const
    {
        
    cout <<setw(2)<< day << '/' << month << '/' << year<<endl;

    }

    int Date::checkday(int testday) const
    {
        static const 
    int daysPermonth[13]=
        { 
    0312831303130313130313031 };
        
        if(
    testday >&& testdaydaysPermonth[month])
            return 
    testday;
        if(
    month==&& testday==29 &&(year%400==0||(year%4==0&&year%100!=0)))
            return 
    testday;
        
    cout << "Invalid day (" << testday << ") set to 1.\n";
        return 
    1;
    }

    // ******* EMPLOYEE.CPP *******// 
    //==========================//
    Employee::Employee()
    {
    }
    Employee::Employee(int day,int month,int year,char *first,char *last,char *job,char *id):date(day,month,year)
    {
        
    //strcpy(Fname,first); ? tai sao khi dung strcpy lai warning????
        
    Fname first;
        
    //strcpy(Lname,last);
        
    Lnamelast;
        
    //strcpy(Job,job);
        
    Job  =job;
        
    //strcpy(ID,id);
        
    ID id;
    }
        
    void Employee::Display() const
    {
        
    cout<<"Full name : "<<Fname<<" "<<Lname<<endl;
        
    cout<<"DOB       : ";date.print();
        
    cout<<"Emp ID    : "<<setw(3)<<ID<<endl;
        
    cout<<"JOB       : "<<setw(3)<<Job<<endl<<endl;
            
    }

    // ******* MAIN *******// 
    //======================//
    int main()
    {
        
        
        
    Employee E1(17,9,1989,"do","anh vu","IT","070684"); 
        
    Employee E2(1,1,1989,"nguyen","dao tri","IT","070606"); 
        
    Employee E3(30,2,1989,"tong","vinh","IT","070605");
        
    E1.Display();
        
    E2.Display();
        
    E3.Display();

        
    Stack <Employeeempl;

        
    /* coi dùm minh cho nay, kbiet chuyen kieu lam sao de add dc vao stack het */
        
    /*    empl.Push(E1);
        empl.Push(E2);
        empl.Push(E3);// error vi k chuyen kieu du lieu dc ???
        empl.Pop(E3);
        empl.Pop(E2);
        empl.Pop(E1);
        
        E1.Display();
        E2.Display();
        E3.Display();*/
        
               
    return 0;


  2. #2
    No Avatar
    ngocbig Khách

    Đã sử dụng template sao không sử dụng vector class?
    Khi "pop" tại sao phải truyền đối số. Đây là stack cơ mà

    C++ Code:
    1. #include <iostream>
    2. #include <iomanip>
    3. #include <cstring>
    4. #include <string>
    5. #include <vector>
    6. #include <stdexcept>
    7.  
    8.  
    9. #define _AFX_SECURE_NO_WARNINGS//Không hiển thị cảnh báo không cần thiết nữa!
    10.  
    11. //#include <mem.h>  // visual k co library nay.kbiet bao gom trog cai nao
    12. using namespace std;
    13.  
    14. /////////// headderfile .h ////////
    15.  
    16. // ******* STACK.H *******//
    17. //=====================//
    18.  
    19. template <typename T>
    20. class Stack
    21. {
    22. private:
    23.     std::vector<T> elems;
    24.     int size;
    25.  
    26. public:
    27.     Stack();
    28.     Stack(int n);
    29.     bool Full() const;
    30.     void Push(T const&);
    31.     void Pop();  
    32.     T Top() const;
    33.     bool Empty() const
    34.     {
    35.         return elems.empty();
    36.     }
    37. };
    38.  
    39.  
    40. // ******* DATE.H *******//
    41. class Date
    42. {
    43.     int _day;
    44.     int _month;
    45.     int _year;
    46.     int checkday(int) const;
    47. public:
    48.     Date();
    49.     Date(const Date& date);
    50.     Date(int,int,int);
    51.     int getDay() const;
    52.     int getMonth() const;
    53.     int getYear() const;
    54.     void print() const;
    55. };
    56.  
    57. // ******* EMPLOYEE.H *******//
    58.  
    59. class Employee{
    60.     Date _dateOfBirth;
    61.     string _firstName;
    62.     string _lastName;
    63.     string _job;
    64.     string _ID;
    65. public:
    66.     Employee();
    67.     Employee
    68.         (
    69.         const Date& dateOfBirth,
    70.         const string& firstName,
    71.         const string& lastName,
    72.         const string& jobTitle,
    73.         const string& ID
    74.         );
    75.  
    76.     //    void Input_Emp();
    77.     void Display() const;
    78.  
    79.     //    friend void Sort_Emp_byname(); //sort then push into Stack
    80.     //    friend void Sort_Emp_byID();
    81. };
    82.  
    83.  
    84. // ******* STACK.CPP *******//
    85. template <typename T> Stack<T>::Stack()
    86. {
    87.     size = 32;
    88. }
    89.  
    90. template <typename T>
    91. Stack<T>::Stack(int n)
    92. {
    93.     size = n;
    94. }
    95. template<typename T>
    96. bool Stack<T>::Full()const
    97. {
    98.     return (elems.size()==size);
    99. }
    100. template <typename T>
    101. void Stack<T>::Push (T const& elem)
    102. {
    103.     if(!Full())
    104.         elems.push_back(elem);
    105. }
    106.  
    107. template<typename T>
    108. void Stack<T>::Pop ()
    109. {
    110.     if (!elems.empty())
    111.         elems.pop_back();
    112. }
    113.  
    114. template <typename T>
    115. T Stack<T>::Top () const
    116. {
    117.     if (elems.empty()) {
    118.         throw std::out_of_range("Stack is empty!");
    119.     }
    120.     return elems.back();
    121. }
    122.  
    123. // ******* DATE.CPP *******//
    124.  
    125. Date::Date()
    126. {
    127.     _day   = 1;
    128.     _month = 1;
    129.     _year  = 2009;
    130. }
    131. Date::Date(const Date& date)
    132. {
    133.     _day = date.getMonth();
    134.     _month = date.getMonth();
    135.     _year = date.getYear();
    136. }
    137. Date::Date(int d,int m,int y)
    138. {
    139.     if(m>0 && m <=12)
    140.         _month = m;
    141.     else
    142.     {
    143.         _month = 1;
    144.         cout<<"Invalid month (" << m << ") set to 1"<<endl;
    145.  
    146.     }
    147.     _year = y;
    148.     _day = checkday(d);
    149.  
    150.     cout << " After set  ";
    151.     print();
    152.     cout<<endl;
    153. }
    154. int Date::getDay() const
    155. {
    156.     return _day;
    157. }
    158. int Date::getMonth()const
    159. {
    160.     return _month;
    161. }
    162. int Date::getYear() const
    163. {
    164.     return _year;
    165. }
    166. void Date::print() const
    167. {
    168.     cout <<setw(2)<< _day << '/' << _month << '/' << _year<<endl;
    169.  
    170. }
    171.  
    172. int Date::checkday(int testday) const
    173. {
    174.     static const int daysPermonth[13]=
    175.     { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    176.  
    177.     if(testday >0 && testday< daysPermonth[_month])
    178.         return testday;
    179.     if(_month==2 && testday==29 &&(_year%400==0||(_year%4==0&&_year%100!=0)))
    180.         return testday;
    181.     cout << "Invalid day (" << testday << ") set to 1.\n";
    182.     return 1;
    183. }
    184.  
    185. // ******* EMPLOYEE.CPP *******//
    186. Employee::Employee()
    187. :_dateOfBirth(0,0,0),_firstName("unknown"),_lastName("unknown"),_job("unknown job's title"),_ID("unknown ID")
    188. {
    189. }
    190. Employee::Employee(
    191.  const Date& dateOfBirth,
    192.  const string& firstName,
    193.  const string& lastName,
    194.  const string& jobTitle,
    195.  const string& ID
    196.  ):_dateOfBirth(dateOfBirth),_firstName(firstName),_lastName(lastName),_job(jobTitle),_ID(ID)
    197. {
    198. }
    199.  
    200. void Employee::Display() const
    201. {
    202.     cout<<"Full name : "<<_firstName<<" "<<_lastName<<endl;
    203.     cout<<"DOB       : ";_dateOfBirth.print();
    204.     cout<<"Emp ID    : "<<setw(3)<<_ID<<endl;
    205.     cout<<"JOB       : "<<setw(3)<<_job<<endl<<endl;
    206. }
    207.  
    208. // ******* MAIN *******//
    209. //======================//
    210. int main()
    211. {
    212.     Employee E1(Date(17,9,1989),"do","anh vu","IT","070684");
    213.     Employee E2(Date(1,1,1989),"nguyen","dao tri","IT","070606");
    214.     Employee E3(Date(30,2,1989),"tong","vinh","IT","070605");
    215.  
    216.     Stack <Employee> empl;
    217.  
    218.     empl.Push(E1);
    219.     empl.Push(E2);
    220.     empl.Push(E3);
    221.     while(!empl.Empty())
    222.     {
    223.         empl.Top().Display();
    224.         empl.Pop();
    225.     }  
    226.     return 0;
    227. }
    Đã được chỉnh sửa lần cuối bởi ngocbig : 10-01-2009 lúc 06:19 PM.

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    4

    vecto mình đã học đâu :(, mình mới coi template được 1 ngày, thấy trong cuốn ebook nó cho bài tập mình làm theo chứ chưa biết vecto là j?
    bạn giải thích cho mình công dụng của vecto đc k? có j mình sẽ ráng tìm hiểu thêm. thanks

  4. #4
    No Avatar
    ngocbig Khách

    vector là một có chức năng như array nhưng là array thông minh,tự động thay đổi kích thước.

    Khi dùng mảng thì kiểu gì bạn cũng phải xác định kích thước cho mảng đúng không nào. Đặc biệt khi kích thước không xác định ngay được thì thường là cho kích thước mảng lớn lên, làm như vậy sẽ lãng phí bộ nhớ khi không dùng hết kích thước đó. Khi dùng vector thì dùng đến đâu sẽ tự tăng đến đó. Một ưu điểm nữa là vì nó là class template do đó có thể dùng cho nhiều loại dữ liệu.

    VD vector<int> int_array là mảng các phần tử kiểu int.
    vector<Employee> emp_array là mảng các phần tử kiểu Employee.
    ....

    Xin lỗi khổ chủ! Mình sửa thêm mấy cái class của bạn nữa. Hì
    Đã được chỉnh sửa lần cuối bởi ngocbig : 10-01-2009 lúc 06:27 PM.

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    http://www.cplusplus.com/reference/stl/vector/
    đọc thêm ở đây để biết Vector

  6. #6
    No Avatar
    ngocbig Khách

    Mặc định template

    vecto mình đã học đâu :(, mình mới coi template được 1 ngày, thấy trong cuốn ebook nó cho bài tập mình làm theo chứ chưa biết vecto là j?
    bạn giải thích cho mình công dụng của vecto đc k? có j mình sẽ ráng tìm hiểu thêm. thanks
    If you're confident about your English, why not consider these books!



    Link:
    Code:
    http://ifile.it/tpo54a3


    Link:
    Code:
    http://ifile.it/dmnloze

  7. #7
    Ngày gia nhập
    01 2008
    Bài viết
    4

    thanks bạn nhiều, mình đang cần về cái STL để nghiên cứu thêm đây

Các đề tài tương tự

  1. Lập trình C++ template là gì? sử dụng template như thế nào?
    Gửi bởi dangvanhoavc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-01-2013, 09:11 PM
  2. Kỹ thuật C++ Template Method có liên quan gì đến template trong C++ ko?
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-10-2010, 11:26 PM
  3. Cách xây dựng và sử dụng template và mảng template trong C++?
    Gửi bởi nhatnha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 03-08-2010, 06:24 PM
  4. C++ template( ko hiểu sai chỗ nào)!!
    Gửi bởi thaiboss trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 28-11-2008, 11:13 PM
  5. Cho em hỏi về Template
    Gửi bởi piglet trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 23-05-2008, 08:41 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn