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

Đề tài: Áp dụng kỹ thuật tạo đối tượng mẫu trên C++

  1. #1

    Mặc định Áp dụng kỹ thuật tạo đối tượng mẫu trên C++

    Mình đang làm một bài về quản lý nhân viên như sau:


    PHP Code:
    class NhanVien
    {
    protected:
        
    string m_strHoTen;
        
    string m_strNgaySinh;
        
    string m_strDiaChi;
    public:
        
    virtual void Nhap() = 0;
        
    virtual void Xuat() = 0;
        
    virtual float TinhLuong() = 0;
    };

    class 
    NVSanXuat : public NhanVien
    {
    private:
        
    int SoSanPham;
    public:
        
    void Nhap();
        
    void Xuat();
        
    float TinhLuong();
    };

    class 
    NVCongNhat : public NhanVien
    {
    private:
        
    int SoNgayCong;
    public:
        
    void Nhap();
        
    void Xuat();
        
    float TinhLuong();
    };

    class 
    NVQuanLy : public NhanVien
    {
    private:
        
    float HeSoLuong
        
    float LuongCoBan
    public:
        
    void Nhap();
        
    void Xuat();
        
    long TinhLuong();
    };

    class 
    DanhSachNhanVien
    {
    private:
        
    vector<NhanVien*> arrNhanVien;
    public:
        
    void NhapDanhSach();
        
    void XuatDanhSach();
        
    void XuatBangLuong();
        
    CNhanVienTimNhanVienLuongCaoNhat();
        
    CNhanVienTimNhanVienLuongThapNhat();
        
    float TongLuong();
    }; 
    Có một lời khuyên là nên áp dụng kỹ thuật tạo đối tượng mẫu như sau:

    PHP Code:
    class NhanVien
    {
        
    ……………………………………………
    public:
        
    virtual NhanVien*  TaoDoiTuong() = 0;
        
    …………………………………..
    };

    class 
    NVSanXuat()
    {
        
    ……………………………………………
    public:
        
    NhanVienTaoDoiTuong()
        {
            
    NhanViennv = new NVSanXuat();
            return 
    nv;
        }

        
    string TenLop()
        {
            return 
    “NVSanXuat”;
        }
        
    ………………………………………….
    };

    vector <NhanVien*> arrDoiTuongMau;
    arrDoiTuongMau.push_back(new NVSanXuat);
    arrDoiTuongMau.push_back(new NVCongNhat);
    arrDoiTuongMau.push_back(new NVQuanLy);

    //Nhập 1 nhân viên mới
    for (int i 0arrDoiTuongMau.size(); i++)
    cout << << :“ << arrDoiTuongMau[i]->TenLop() << endl;
    int iLoai;
    cin >> iLoai;
    arrNhanVien.push_back(arrDoiTuongMau[id-1]->TaoDoiTuong()); 
    Nhưng mình không hiểu lắm về đoạn này việc này. Bạn nào hiểu có thể giải thích cũng như viết lại hoàn chỉnh đoạn trên cho mình được không?
    Thanks nhiều!

  2. #2
    Ngày gia nhập
    04 2009
    Nơi ở
    Hà Nội
    Bài viết
    42

    Trông đoạn code trên giống như xây dựng hàm tạo mặc định. Bạn không sử dụng kế thừa làm sao mà khai báo virtual được. Còn nếu bạn sử dụng theo kiểu đối tượng tânhf phần(lớp là một thành viên của lớp chứa) thì bạn phải xây dưng hàm tạo của đối tượng thành phần. Ở đây trong lớp NVSanXuat gọi đến NhanVien, mà ở trên bạn đã khai báo hàm tạo cho lớp NhanVien rồi thì bạn phải lập trình hàm tạo cho đối tượng thành phần trong lớp NVSanXuat và thực hiện thao tác bằng ":".
    Còn chỗ (new NVSanXuat) thì mình không rõ lắm. Mới gặp lần đầu. Đấy là suy nghĩ của mình, bạn cho í kiến nhé.

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

    Code:
    void CongTy::Nhap()
    {
    	cout << "Nhap so nhan vien trong cong ty: ";
    	cin  >> m_iSoLuong;
    	int i;
    
    	vector<NhanVien*>arrDoiTuongMau;
    	arrDoiTuongMau.push_back(new NhanVienCongNhat);
    	arrDoiTuongMau.push_back(new NhanVienSanXuat);
    	arrDoiTuongMau.push_back(new NhanVienQuanLy);
    
    	for(i=0; i<arrDoiTuongMau.size(); ++i)
    	{
    		cout << i+1 << " : " << arrDoiTuongMau[i]->tenLop() << endl;
    	}
    
    	for(i=0; i<m_iSoLuong; ++i)
    	{
    		int iLoai;
    		cout << "Enter: " ;
    		cin  >> iLoai;
    		ds.push_back(arrDoiTuongMau[iLoai - 1]->taoDoiTuong());
    
    		ds[i]->Nhap();
    	}
    }
    
    void CongTy::Xuat()
    {
    	for(int i=0; i<m_iSoLuong; ++i)
    	{
    		cout << endl << "Nhan Vien thu ["<<i+1<<"] " << endl;
    		ds[i]->Xuat();
    	}
    }
    Đó bạn xem thử coi, củng học khtn hả

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

  1. Thuật toán tìm đường đi giữa hai điểm trên bản đồ
    Gửi bởi lacvuong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 26-03-2011, 08:57 PM
  2. Lập trình C | Thuật toán sắp xếp chèn thực hiện trên C
    Gửi bởi manutd1988 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 14-12-2010, 04:09 PM
  3. Lập trình C Kỹ thuật lính canh | kỹ thuật đặt cờ hiệu | trên C là gì?
    Gửi bởi shinichi1290 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: 14-03-2010, 12:28 PM
  4. Thuật toán in ra tam giác trên C?
    Gửi bởi lebronjamesuit 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: 12-01-2010, 12:18 AM
  5. Kỹ thuật cài đặt thuật toán heapsort và quicksort trên C?
    Gửi bởi Taylaptrinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 06-04-2008, 06:50 PM

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