Mình có một ví dụ như sau:
Ví dụ mình có lớp Nhân Viên (cha) và 2 lớp con là nhân viên san xuat và nhân viên van phong
Khi mình đa hình thì sẽ dùng 1 vector và dồn hết chúng vào (tức là nhập toàn bộ nhân viên vào một vector)
Cho mình hỏi là khi xuất ra thì làm sao để xuất được theo danh sách riêng của từng thằng từ dữ liệu trong cái vector đó. (không phải xuất chung 1 lần, nếu như thế sẽ không biết thằng nào là nhân viên san xuat và nhân viên van phong)
Cảm ơn mọi người
Cần giúp đỡ về đa hình trong c++
Vậy tại sao không tách riêng ra làm 2 vector.
Mỗi nhân viên thuộc một loại khác nhau, lúc xuất ra bạn cho cái điều kiện vào, nếu là nhân viên sản xuất hoặc nếu là nhân viên văn phòng thì mới gọi hàm xuất.
đa hình mà bạn. Nếu 2 vector thi nó mất tính đa hình
Clas Nhân Vien
public void print(){}
Class NVSX
public void print(){
print "Nhan Vien San Xuat";
}
Class NVVP
public voide print(){
print "Nhan Vien Van Phong"
}
Như code mã giả ở trên. Lớp cha sẽ khai báo 1 hàm, lớp con thì hiện thực hàm đó.
Khi in ra thì bạn sẽ biết nhân viên đó là nhân viên nào.
Quan trọng là lúc bạn đưa đống nhân viên đó vào vector làm sao thôi.Ví dụ bạn co 200 nhân viên, trong đó có 150 nhân viên sản xuât, 50 nhân viên văn phòng.
Bạn đưa nhân viên sản xuất vào vetor:
Sanxuat* = new NhanVien[150];
// sau do dua 150 nhân viên đã khởi tạo vào vector
Tiếp theo bạn khởi tạo 50 nhân viên văn phòng
VanPhong* = new NhanVien[150];
//Sau do đưa 50 nhân viên van phòng vào vector.
Khi bạn khai báo thế thì trình biên dich tự biết cái nào là nhân viên văn phòng, cái nào là nhân vien sản xuât.
Lúc nhập dữ liệu hay xuất dữ liệu thì cứ việc:
NhanVien[i].Nhap();
NhanVIen[i].Xuat();
Rồi thầy yêu cầu chỉ có 10 nhân viên sản xuất, 20 nhân viên văn phòng thí sao. Chỉ việc sửa mấy cái new new.bên dưới vẫn cứ NhanVien[i].nhap(), NhanVien[i].Xuat();
ở hàm main bạn sẽ viết như sau
nhanvien *nv[100];int n,chon;
cout<<nhap so nhan vien;cin>>n;
for(int i=0;i<n;i++)
{
cout<<endl<<[1].nhanviensanxuat-[2].nhanvienvanphong;cin>>chon;
if(chon==1)nv[i]=new nhanviensanxuat;
else if(chon==2)nv[i]= new nhanvienvanphong;
nv->nhap();
}
for(int i=0;i<n;i++)
nv[i]->tinh();
for(int i=0;i<n;i++)
nv[i]-theo mình là làm như vậy
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?