Chào mọi người! Em đang code 1 bài bị báo lỗi Exception thrown trong hàm SapXep(). Em đặt breakpoint debug dòng if ((SV[i]->DTB()) < (SV[j]->DTB())) thì báo là SV[i] và SV[j] có giá trị NULL. Mọi người có thể giúp em lỗi này được không ạ? Code của em làm được:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class SinhVien {
protected:
int maso;
string hoten;
string he;
float LTC;
float dtb;
public:
SinhVien() {
}
virtual void Nhap() {
cout << "\nNhap ma so sinh vien: ";
cin >> maso;
cout << "\nNhap ho va ten sinh vien: ";
cin.ignore();
getline(cin, hoten);
cout << "\nNhap he dao tao: ";
//cin.ignore();
getline(cin, he);
cout << "\nNhap diem lap trinh C: ";
cin >> LTC;
}
virtual void Xuat() {
cout << "\nMa so sinh vien: " << maso;
cout << "\nHo va ten: " << hoten;
cout << "\nHe: " << he;
cout << "\nDiem lap trinh C: " << LTC;
}
virtual float DTB() {
return(LTC);
}
};
class SVCLC :public SinhVien {
private:
float DTCB;
public:
void Nhap() {
SinhVien::Nhap();
cout << "\nNhap diem dien tu co ban: ";
cin >> DTCB;
}
void Xuat() {
SinhVien::Xuat();
cout << "\nDiem dien tu co ban: " << DTCB;
cout << "\nDiem trung binh: " << DTB();
}
friend istream& operator >>(istream& is, SinhVien& sv) {
sv.Nhap();
return is;
}
friend ostream& operator << (ostream& os, SinhVien& sv) {
sv.Xuat();
return os;
}
float DTB() {
return ((2 * LTC) + DTCB) / 3;
}
};
class SVChinhQuy : public SinhVien {
private:
float NMKT;
public:
/*
SVChinhQuy() :SinhVien() {
NMKT = 0;
}*/
void Nhap() {
SinhVien::Nhap();
cout << "\nNhap diem nhap mon ky thuat: ";
cin >> NMKT;
}
void Xuat() {
SinhVien::Xuat();
cout << "\nDiem nhap mon ky thuat: " << NMKT;
cout << "\nDiem trung binh: " << DTB();
}
float DTB() {
return ((3 * LTC) + (2 * NMKT)) / 5;
}
};
class Menu {
private:
vector <SinhVien*> SV;
public:
void Nhap() {
int n;
cout << "\nNhap tong so sinh vien: ";
cin >> n;
// chon doi tuong he
SV.resize(n);
for (int i = 0; i < n; i++) {
cout << "\nSinh vien Chat luong cao (1), Sinh vien Chinh quy (2): ";
int k;
cin >> k;
SinhVien* sv;
if (k == 1)
sv = new SVCLC;
else
sv = new SVChinhQuy;
sv->Nhap();
SV.push_back(sv);
}
}
void Xuat() {
cout << "\nDanh sach sinh vien: ";
for (int i = 0; i < SV.size(); i++)
SV.at(i)->Xuat();
}
void DTB() {
for (int i = 0; i < SV.size(); i++)
SV.at(i)->DTB();
}
void SapXep() {
SinhVien* temp;
temp = new SinhVien;
for (int i = 0; i < SV.size() - 1; i++) {
for (int j = i + 1; j < SV.size(); i++) {
if ((SV[i]->DTB()) < (SV[j]->DTB())) {
temp = SV[i];
SV[i] = SV[j];
SV[j] = temp;
}
}
}
for (int i = 0; i < SV.size(); i++) {
cout << "\nSap xep tang dan theo diem trung binh: ";
SV[i]->Xuat();
}
delete temp;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?