#include <iostream>
#include <iomanip>
#include <string.h>
using namespace std;
class sinhvien
{ private:
char ten[20];
float diemtoan;
float diemly;
float diemhoa;
float dtb;
char mssv[20];
public:
void nhap();
void xuat();
string hebon(float dtb);
char tensv();
};
char sinhvien::tensv()
{
}
void sinhvien::nhap()
{
sinhvien sv;
cout<<" nhap ten sv :";
cin.ignore(1);
cin.get(ten,20);
cout<<"nhap MSSV :";
cin>>mssv;
cout<<"nhap diem toan:";
cin>>diemtoan;
cout<<"nhap diem ly :";
cin>>diemly;
cout<<"nhap diem hoa :";
cin>>diemhoa;
dtb=(diemtoan+diemly+diemhoa)/3.0;
}
void sinhvien::xuat()
{ cout<<setw(15)<<ten;
cout<<setw(15)<<mssv<<setw(12)<<diemtoan;
cout<<setw(12)<<diemly<<setw(12)<<diemhoa;
cout<<setw(12)<<dtb;
cout<<setw(12)<<hebon(dtb)<<endl;
}
string sinhvien::hebon(float dtb)
{
if(dtb>=9&&dtb<10) return "A";
if((dtb>=8.5&&dtb<9)) return "B+";
if((dtb>=7.5&&dtb<8.5)) return "B";
if((dtb>=6.5&&dtb<7.5)) return "C+";
if((dtb>=5.5&&dtb<6.5)) return "C";
if((dtb>=4.5&&dtb<5.5)) return "D+";
if((dtb>=3.5&&dtb<4.5)) return "D";
if(dtb<3.5) return "F";
}
int main()
{ cout<<setiosflags(ios::showpoint)<<setprecision(2);
sinhvien sv[20];
int n;
cout<<"nhap so sinh vien:";
cin>>n;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(sv[i].ten>sv[j].ten))
{
sinhvien str =sv[i];
sv[i]=sv[j];
sv[j]=str;
}
for(int i=0;i<n;i++)
{
sv[i].nhap();
}
cout<<"----------------------------------------------------------------------------------------------------------------------"<<endl;
cout<<" HOTEN MA SV DIEMTOAN DIEMLY Diemhoa DIEMTB DIEM HE 4 CHU "<<endl;
for(int i=0;i<n;i++)
{
sv[i].xuat();
cout<<endl;}
return 0;
}
Hỏi gọi đối tượng ra khỏi lớp trong private
code của bạn lỗi gì thế?
1 Like
ten là thuộc tính private nên chỉ gọi được trong các phương thức của object đó (nhap(), xuat(), hebon(), tensv()). Nếu muốn so sánh tên các sinh viên, phải dùng sv[i].tensv()>sv[j].tensv()
char sinhvien::tensv(), khai báo xong, xây dựng chưa có return (Mình không biết C++ thì xây dựng thế nào, không biết thế này có đúng không):
char[] tensv();...
char[] sinhvien::tensv()
{
return ten;
}
lỗi bạn ạ ko khai báo kiểu char [] tensv() đc
lỗi char ten[];
private ý
bạn viết thêm 1 hàm public lấy tên sinh viên. So sánh bằng kết quả trả về của cái hàm đó
mà đã dùng OOP thì nên dùng string thay char* cho khỏe.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?