Cần giúp đỡ về đa hình trong c++

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

Vậy tại sao không tách riêng ra làm 2 vector.

1 Like

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.

1 Like

đ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.

2 Likes

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();

2 Likes

ở 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

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?