30/09/2018, 16:38
Làm thế nào để xác định chính xác thuộc tính của các đối tượng?
Chào mọi người. Mình đang học hướng đối tượng, gặp bài toán sau mà không biết minh xây dựng các lớp có đúng không nữa. Nhờ mọi người kiểm tra giúp mình với. Đề bài:
Mùa hè lại đến, công viên văn hóa Đầm Sen hân hoan đón chào các em thiếu nhi , các bạn học sinh, sinh viên và toàn thể quí khách đến tham quan và tham dự các trò chơi kì thú và hấp dẫn. Giả sử trên mỗi chiếc vé mà công viên phát hành, đều có ghi lại mã vé(chuỗi), họ tên người chủ vé(chuỗi), năm sinh của người đó (số nguyên) và số trò chơi mà người đó tham dự(số nguyên). Để phục vụ tối đa cho lợi ích khách hàng, công viên phát hành 2 loại vé là vé trọn gói và vé từng phần. Giá vé trọn gói có thể chơi tất cả 30 trò chơi có trong công viên. Đối với gói từng phần, giá vé là 70.000VNĐ (giá vé vào cổng), khi người chơi tham dự một trò chơi nào thì cần trả thêm 20.000 VNĐ cho một trò chơi.
Mình thiết lập các lớp như sau:
//Dinh nghia lop ve
class Ve
{
protected:
string MaVe;
string HoTenChuVe;
string NamSinhChuVe;
unsigned long GiaTien;
int SoTroChoi;
public:
virtual void Nhap();
virtual void Xuat();
virtual unsigned long TinhTien();
};
//Dinh nghia lop Ve Tron Goi
class VeTronGoi: public Ve
{
public:
void Nhap();
void Xuat();
virtual unsigned long TinhTien();
};
// Dinh nghia lop Ve Tung Phan
class VeTungPhan: public Ve
{
public:
void Nhap();
void Xuat();
unsigned long TinhTien();
};
Bài liên quan
Năm sinh thì để cho nó kiểu unsigned int cũng được rồi.
Chú ý khi tạo một lớp nên có constructor và destructor (mặc dù không có thành phần nào cần giải phóng một cách thủ công) cho nó phong thủy. Giả sử khi bạn dùng constructor cho lớp Vé trọn gói, thì ngay khi khai báo đối tượng nó sẽ mang giá trị số trò chơi là 30, và giá tiền quy định trước luôn, đỡ phải mất công setup cho nó. Còn vé từng phần thì constructor khởi tạo theo kiểu mà bạn quy định thế nào đó.
Khi mình khai báo lớp
Ve
có thuộc tínhGiaTien
, nhưng trong phương thứcNhap
của lớpVe
mình không nhập thông tin của giá tiền mà để phương thứcNhap
của lớpVeTronGoi
và lớpVeTungPhan
thực hiện việc này thì có được không vậy @nguyenchiemminhvuNhập trước hay nhập sau thì cũng như nhau thôi. Nếu bạn không có ý định sử dụng lớp Ve sau này thì làm thế cũng được. Không thì cho nó cái giá trị là 70000 VNĐ từ ban đầu coi như vé vào cửa. Còn lớp kế thừa của nó thì chỉnh lại sau.
Để mình làm rồi post bạn kiểm tra zùm nha?
Mới làm xong, nhờ mọi người cho nhận xét.
Mình nghĩ trong lớp công viên nên thay phần nhập ở chổ chọn vé trọn gói hay vé từng phần, bằng cách thêm 1 thuộc tính kiểu bool có tên là is_total. Như thế khi bạn cho khách hàng chọn, bạn chỉ cần in ra dòng
sẽ ngắn gọn hơn rất nhiều, sau này muốn xử lý trên trường đó cũng dễ hơn. Thuộc tính là thứ gắn liền với đối tượng ngay từ khi mới tạo ra.