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;
}
... viết 22:37 ngày 30/09/2018

Vấn đề bạn gặp phải không nằm ở chổ kế thừa. Bạn xem lại chổ này:

sv **a;

và dưới main là chổ này:

main()
{
dssv a;
cin>>a;
cout<<a;
}

Vu Nguyentuan viết 22:46 ngày 30/09/2018

chuẩn bác ạ biết sai ở đấy rồi nhưng k sửa đc

... viết 22:36 ngày 30/09/2018

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

Bài liên quan
0