30/09/2018, 20:32
Nhờ sửa hộ code C++ kế thừa
em muốn tạo 1 danh sách sv gồm sv ưu tiên và sv thường. pro nào có thể chữa theo cách của em đang viết với ạ
#include<iostream>
using namespace std;
class sv{
int msv;
string ten;
float d1,d2,d3;
public:
friend istream &operator >>(istream &is, sv &x);
friend ostream &operator <<(ostream &os, sv &x);
friend class dssv;
virtual float tongdiem()
{
return d1+d2+d3;
}
};
ostream &operator<<(ostream &os, sv &x)
{
os<<"ten: "<<x.ten<<endl<<"msv: "<<x.msv<<endl<<"tong diem"<<x.tongdiem();
return os;
}
istream &operator>>(istream &is, sv &x)
{
cout<<"nhap ten: ";
fflush(stdin);
getline(is,x.ten,'
');
cout<<endl<<"msv: ";
is>>x.msv;
cout<<"d1: ";
is>>x.d1;
cout<<endl<<"d2: ";
is>>x.d2;
cout<<endl<<"d3: ";
is>>x.d3;
}
class svut: public sv{
float dut;
public:
float tongdiem()
{
return sv::tongdiem()+ dut;
}
friend istream &operator >>(istream &is, svut &x);
friend ostream &operator <<(ostream &os, svut &x);
friend class dssv;
};
istream &operator >>(istream &is, svut &x)
{
is>>(sv&)x;// nhap nhu la sinh vien
cout<<"nhap dut";
is>>x.dut;
return is;
}
ostream &operator <<(ostream &os, svut &x){
os<<(sv&)x;
return os;
os<<"tong diem"<<x.tongdiem();
}
class dssv{
int spt;
sv **a;
public:
friend istream &operator >>(istream &is, dssv &x);
friend ostream &operator <<(ostream &os, dssv &x);
};
istream &operator >>(istream &is, dssv &x)
{
cout<<"nhap spt"<<endl;
is>>x.spt;
for(int i=0;i<spt;i++)
{
int a=0;
cout<<"ban nhap sv loai gi a=1- sv, a =2 - svut ";
is>>a;
if(a==1) a[i]=new sv();
else a[i]=new svut();
a[i]->nhap();
}
}
main()
{
dssv a;
cin>>a;
cout<<a;
}
Bài liên quan
Vấn đề bạn gặp phải không nằm ở chổ kế thừa. Bạn xem lại chổ này:
và dưới main là chổ này:
chuẩn bác ạ biết sai ở đấy rồi nhưng k sửa đc
Mình chỉ có thể nói lỗi của bạn là chưa cấp phát cho con trỏ sv **a mà đã dùng nó để nhập dữ liệu vào rồi. Bạn nên tạo constructor cho class của bạn và cấp phát trong đó.