01/10/2018, 08:30

Hỏi gọi đối tượng ra khỏi lớp trong private

#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;
}
huyentrang viết 10:45 ngày 01/10/2018

code của bạn lỗi gì thế?

Trần Hoàn viết 10:43 ngày 01/10/2018

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;
}
tô đình duy viết 10:43 ngày 01/10/2018

lỗi bạn ạ ko khai báo kiểu char [] tensv() đc

tô đình duy viết 10:45 ngày 01/10/2018

lỗi char ten[];
private ý

Nguyễn Xuân Phúc viết 10:41 ngày 01/10/2018

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.

Bài liên quan
0