01/10/2018, 12:03

Cho e hỏi về hàm khởi tạo trong class

e có 1 class thisinh, trong đó có hàm khởi tạo , giải sử thisinh(x,y,z)
trong hàm main e khai báo thisinh *ts
ts= new thisinh[n] với n được nhập từ bàn phím, giả sử n đươc nhập là 5.
bây giờ e muốn khởi tạo cho i=3 thì làm sao ạ, e làm như thế này theo cú pháp thì báo lỗi tại i,
thisinh a[i](x,y,z)
các ac có thể giải thích cho e được k ạ, e mới học class, e cảm ơn nhiều.!!!
e thêm code của e
#include<iostream> using namespace std; class thisinh { private: char *ten; float toan; float ly; float hoa; public: thisinh(); // khởi tạo không tham số thisinh(char *ht,float t,float l,float h); // hàm khởi tạo có tham số float xuattoan(); float xuatly(); float xuathoa(); float tong(); ~thisinh(); }; thisinh::thisinh() { ten = new char[50]; ten = ""; toan = 0; ly = 0; hoa = 0; } thisinh::thisinh(char *ht, float t, float l, float h) { ten = new char[50]; ten = ht; toan = t; ly = l; hoa = h; } float thisinh::xuattoan() { return toan; } float thisinh::xuatly() { return ly; } float thisinh::xuathoa() { return hoa; } float thisinh::tong() { return toan + ly + hoa; } thisinh::~thisinh() { delete [] ten; } int main() { thisinh *a; int n; float toan, ly, hoa; char *hoten; hoten = new char[50]; cout << "Nhap so luong thi sinh: "; cin >> n; cin.ignore(); a = new thisinh[n]; for (int i = 0; i < n; i++) { cout << "Nhap thong tin sinh vien thu " << i + 1 << " : " << endl; cout << "Nhap ten sinh vien: "; cin.getline(hoten, 50); cout << "Nhap lan luot diem toan, ly, hoa: "; cin >> toan >> ly >> hoa; thisinh a[i](hoten, toan, ly, hoa); } delete [] hoten; delete [] a; system("pause"); return 0; }

rogp10 viết 14:12 ngày 01/10/2018

Không được, phải for.

Dark.Hades viết 14:04 ngày 01/10/2018

thisinh ai

Bạn giải thích dòng này đi, mình không hiểu các biến bạn dùng. A là đối tượng đơn, chưa khởi tạo thì làm sao gọi [i] được??

Khuyết Danh viết 14:14 ngày 01/10/2018

ý là mình đã for rồi bạn
for (i=0; i<n;i++) thisinh a[i](x,y,z)

Khuyết Danh viết 14:17 ngày 01/10/2018

mình đã khởi tạo ở ngoài hàm main rồi bạn.

Dark.Hades viết 14:09 ngày 01/10/2018

a = new thisinh[n];

Ở dòng này bạn đã khai báo cho a giữ n object thisinh của construct thisinh() rồi, vậy nên bạn cần gán giá trị cho nó bằng tạo setter/getter, hoặc copy/move một object khác vào

thisinh a[i](hoten, toan, ly, hoa);

Trong C++ (hay đa số các ngôn ngữ lập trình hiện nay) khi đã khai báo đối tượng rồi thì lúc gán giá trị không cần thêm kiểu dữ liệu cho nó nữa

a[i](hoten, toan, ly, hoa);

//C++ chưa hỗ trợ/không hiểu kiểu viết __invoke như thế này

Khuyết Danh viết 14:14 ngày 01/10/2018

e cám ơn a nhiều ạ!!!

Bài liên quan
0