Hướng đối tượng quản lý hành khách đi máy bay c++

Em chào mọi người. Hiện em đang mắc vấn đề ở hàm tính tổng tiền vé máy bay trong class Hanhkhach, nhưng hàm này không trả về kết quả gì. Mong mọi người giúp em với ạ.

#include <iostream>
#include <iomanip>

using namespace std;

class VeMayBay {
    public:
        void nhap();
        void xuat();
        int get_giave() {
            return giave;
        }
    private:
        string tenchuyen;
        int ngaybay, giave;
};

class Nguoi {
    public:
        void nhap();
        void xuat();
    protected:
        string hoten, gioitinh;
        int tuoi;
};

class HanhKhach : public Nguoi {
    public:
        void nhap();
        void xuat();
        int TongTien() {
            return (ve->get_giave())*soluong;
        }
    private:
        int soluong;
        VeMayBay *ve;
};

void VeMayBay::nhap() {
    cin.ignore();
    cout<<"Nhap ten chuyen: "; getline(cin, tenchuyen);
    cout<<"Nhap ngay bay: "; cin>>ngaybay;
    cout<<"Nhap gia ve: "; cin>>giave;
}

void Nguoi::nhap() {
    cout<<"Nhap ho ten: "; getline(cin, hoten);
    cout<<"Nhap gioi tinh: "; getline(cin, gioitinh);
    cout<<"Nhap tuoi: "; cin>>tuoi;
}

void HanhKhach::nhap() {
    Nguoi::nhap();
    cout<<"Nhap so luong: "; cin>>soluong;
}

void HanhKhach::xuat() {
    cout<<left<<setw(20)<<hoten<<left<<setw(20)<<gioitinh<<left<<setw(15)<<tuoi<<right<<setw(30)<<TongTien()<<endl;
}

int main() {
    int n;
    cout<<"Nhap so hanh khach: "; cin>>n;
    VeMayBay ve[n];
    HanhKhach hk[n];
    cin.ignore();
    for(int i=0;i<n;i++)
    {
        cout<<"Nhap thong tin hanh khach: "<<endl;
        hk[i].nhap();
        ve[i].nhap();
        cin.ignore();
    }
    cout<<"Danh sach hanh khach: "<<endl;
    cout<<left<<setw(20)<<"Ho ten"<<left<<setw(20)<<"Gioi tinh"<<left<<setw(15)<<"Tuoi"<<right<<setw(30)<<"Tong tien"<<endl;
    for(int i=0;i<n;i++)
    {
        hk[i].xuat();
    }
    return 0;
}

Bạn làm hướng chức năng chứ có hướng đối tượng đâu!
Rõ ràng là trong lớp HanhKhach có một trường (kiểu con trỏ) là VeMayBay *ve:

  1. Bạn không hề khởi tạo giá trị cho con trỏ.
  2. Không hề nhập giá trị (giá vé) cho con trỏ này.

Như dòng đầu tiên mình có nhắc, bạn đang làm theo kiểu hướng chức năng, sao lại tạo 2 mảng song song cho VeMayBay ve[n]HanhKhach hk[n] làm gì? Trong khi đó trong lớp HanhKhach đã có VeMayBay rồi.
Cũng dặn bạn luôn, đây là C++ nên kiểu tạo mảng ve[n], hk[n] là không nên.

2 Likes

Nếu không dùng mảng ve[n], hk[n] thì nên làm gì để tạo ra n đối tượng hành khách ạ? Bạn gợi ý giúp mình với.

tạo mảng đối tượng HanhKhach

( Còn muốn tính được giá vé của ng đó thì bạn phải khởi tạo và nhập giá trị cho thuộc tính vé của đối tượng HanhKhach )

1 Like

Sau khi nghe bạn nói, mình có sửa lại. Mình làm như vậy đã đạt yêu cầu chưa ạ?

#include <iostream>
#include <iomanip>

using namespace std;

class VeMayBay {
    public:
        void nhap();
        void xuat();
        int get_giave() {
            return giave;
        }
    private:
        string tenchuyen;
        int ngaybay, giave;
};

class Nguoi {
    public:
        void nhap();
        void xuat();
    protected:
        string hoten, gioitinh;
        int tuoi;
};

class HanhKhach : public Nguoi {
    public:
        void nhap();
        void xuat();
        int TongTien() {
            //VeMayBay *ve = new VeMayBay;
            return (ve->get_giave())*soluong;
        }
    private:
        int soluong;
        VeMayBay *ve = new VeMayBay;
};

void VeMayBay::nhap() {
    cin.ignore();
    cout<<"Nhap ten chuyen: "; getline(cin, tenchuyen);
    cout<<"Nhap ngay bay: "; cin>>ngaybay;
    cout<<"Nhap gia ve: "; cin>>giave;
    
}

void Nguoi::nhap() {
    cout<<"Nhap ho ten: "; getline(cin, hoten);
    cout<<"Nhap gioi tinh: "; getline(cin, gioitinh);
    cout<<"Nhap tuoi: "; cin>>tuoi;
}

void HanhKhach::nhap() {
    
    Nguoi::nhap();
    ve->nhap();
    cout<<"Nhap so luong: "; cin>>soluong;
}

void HanhKhach::xuat() {
    cout<<left<<setw(20)<<hoten<<left<<setw(20)<<gioitinh<<left<<setw(15)<<tuoi<<right<<setw(30)<<TongTien()<<endl;
}

int main() {
    int n;
    cout<<"Nhap so hanh khach: "; cin>>n;
    //VeMayBay ve[n];
    HanhKhach hk[n];
    cin.ignore();
    for(int i=0;i<n;i++)
    {
        cout<<"Nhap thong tin hanh khach: "<<endl;
        hk[i].nhap();
        //ve[i].nhap();
        cin.ignore();
    }
    cout<<"Danh sach hanh khach: "<<endl;
    cout<<left<<setw(20)<<"Ho ten"<<left<<setw(20)<<"Gioi tinh"<<left<<setw(15)<<"Tuoi"<<right<<setw(30)<<"Tong tien"<<endl;
    for(int i=0;i<n;i++)
    {
        hk[i].xuat();
    }
    return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?