Bài tập kế thừa trong C++

Chào mọi người. Em có bài tập về tính kế thừa trong C++. Em đang bí ở 2 hàm int addItem(const CarToy& carToy)int addItem(const PuzzleToy& puzzleToy).


Đây là file code ạ (em đã code được các hàm tạo ở trên): https://github.com/Ulrich-Stern/C-/blob/main/Question%209. Mong mọi người giúp đỡ. Em cảm ơn nhiều ạ!

Đây chắc là code gốc của bài này:

class ToyBox {
  private:
    Toy *toyBox[5];
    int numberOfItems;
  ...

Và bạn có dòng này:

*this->toyBox = NULL;

Và các dòng này:

toyBox[numberOfItems]->price = carToy.price;
toyBox[numberOfItems]->price = puzzleToy.price;

Mình thấy bạn nên học lại kiến thức về con trỏ. :kissing:


Đề cho toyBox là một mảng chứa con trỏ kiểu Toy.
Vì vậy dòng *this->toyBox = NULL hiểu thành this->toyBox[0] = NULL. :v :V
Không cần thiết vì có biến numberOfItems rồi, nếu bạn muốn gán bằng NULL thì hãy gán cho cả mảng, chứ đừng chỉ gán cho phần tử đầu như v. :v

toyBox là mảng các con trỏ nên toyBox[i] là một con trỏ, và nó chưa được cấp phát và trỏ đi bất cứ đâu nên bạn truy cập và gán vào this->toyBox[numberOfItems]->price là UB.

Mà bạn chưa hiểu đa hình là gì rồi. :v :V
Đa hình mà đẻ ra mà lại phải gán giá tiền cho từng sản phẩm như kia thì sinh ra làm gì. :kissing:

Có thể sửa kiểu bẩn bẩn như này:

toyBox[numberOfItems] = &carToy;

Còn đúng thì bạn phải cấp phát một Toy mới như này:

toyBox[numberOfItems] = new CarToy(carToy.price, carToy.color);

Ngoài ra thì dùng C++ người ta xài nullptr chứ không thèm xài NULL. :kissing:

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?