Lập trình hướng đối tượng quản lý các con vật

Mọi người cho em cách làm bài này với ạ
Lập trình chương trình quản lý các con vật gồm các loại: Chó, ngựa, chim, cá. Yêu cầu:

  1. Cho phép nhập vào từ bàn phím một con vật. Xác định loại con vật.
  • Nếu là chó, ngựa, nhập vào chiều cao
  • Nếu là chim nhập vào chiều dài sải cánh
  • Nếu là cá, nhập chiều dài
  1. Chức năng tính cân nặng: Cho in toàn bộ hoặc lấy ngẫu nhiên 1 con
  • Chó = chiều cao (m) x 20 (kg)
  • Ngựa = chiều cao x 100
  • Chim = chiều dài cánh (m) x 10
  • Cá = chiều dài x 10
  1. Chức năng tính cách và tốc độ di chuyển (km/h): Cho in toàn bộ hoặc lấy ngẫu nhiên 1 con
  • Chó = chiều cao (m) x 20m/s
  • Ngựa = chiều cao x 20m/s
  • Chim = chiều dài cánh (m) x 15 m/s
  • Cá = chiều dài x 7 m/s

bạn đã học được gì về hướng đối tượng, và đã hiểu được gì rồi,
có thể chia sẻ một ví dụ về lập trình hướng đối tượng, ví dụ như share 1 đoạn code và phân tích đoạn code có không?

#include <iostream>
  
using namespace std;
// lop co so: Hinh
class Hinh {
   public:
      void setChieuRong(int rong) {
         chieuRong = rong;
      }
      void setChieuDai(int dai) {
         chieuDai = dai;
      }
   protected:
      int chieuRong;
      int chieuDai;
};
 
// day la lop ke thua: HinhChuNhat
class HinhChuNhat: public Hinh {
   public:
      int tinhDienTich() { 
         return chieuRong * chieuDai; 
      }
};
 
int main(void) {
   HinhChuNhat hcn;
  
   hcn.setChieuRong(10);
   hcn.setChieuDai(15);
   // in dien tich cua doi tuong.
   cout << "Dien tich HCN la: " << hcn.tinhDienTich() << endl;
   return 0;
}

Ở đây, class HinhChuNhat đã kế thừa class Hinh. Toàn bộ các thuộc tính như chieuRong, chieuDai và các phưuong thức setChieuRong, setChieuDai sẽ được class HinhChuNhat kế thừa nguyên vẹn mà không cần khởi tạo lại. Gửi bạn

Vậy là bạn chưa học đa hình (phương thức ảo/thuần ảo) rồi, bài này áp dụng đa hình.

2 Likes

với cái đề bài trên, bạn có thấy điểm chung gì không?
có một thuộc tính gì đó đại loại là kích thước, dù cụ thể là chiều cao rộng dài nhưng nhìn chung là 1 con số kích thước
có một method tính cân nặng
có một method tính tốc độ di chuyển

nếu bạn không biết làm, thì khai báo 4 cái class ra rồi mọi người sẽ correct cho bạn

Cảm ơn sự giúp đỡ của bạn

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;
class Animal {
    // Khai báo thuộc tính - properties
    protected:
        float dimension;
    public:
        // method Constructor
        Animal(float dim) {
            this->dimension = dim;
        }
        // Methods
        int getDimension() {
            return this->dimension;
        };
        int getSpeed();
        int getWeight();
        void show();
        
};

class Dog :public Animal {
public:
    Dog(float dim) : Animal(dim) {};
    int getSpeed() {
        return dimension * 20 * 3,6;
    }
    int getWeight() {
        return dimension * 20;
    }
    void show() {
        cout << "Con cho co\n - Chieu dai " << dimension << " m\n - Can nang " << getWeight() << " kg\n - Van toc " << getSpeed() << " km/h" << endl;
    }
};

class Horse :public Animal {
public:
    Horse(float dim) : Animal(dim) {};
    int getSpeed() {
        return dimension * 20 * 3,6;
    }
    int getWeight() {
        return dimension * 100;
    }
    void show() {
        cout << "Con ngua co\n - Chieu dai " << dimension << " m\n - Can nang " << getWeight() << " kg\n - Van toc " << getSpeed() << " km/h" << endl;
    }
};

class Bird :public Animal {
public:
    Bird(float dim) : Animal(dim) {};
    int getSpeed() {
        return dimension * 15 * 3,6;
    }
    int getWeight() {
        return dimension * 10;
    }
    void show() {
        cout << "Con chim co\n - Chieu dai sai canh " << dimension << " m\n - Can nang " << getWeight() << " kg\n - Van toc " << getSpeed() << " km/h" << endl;
    }
};

class Fish :public Animal {
public:
    Fish(float dim) : Animal(dim) {};
    int getSpeed() {
        return dimension * 7 * 3,6;
    }
    int getWeight() {
        return dimension * 10;
    }
    void show() {
        cout << "Con ca co\n - Chieu dai: " << dimension << " m\n - Can nang: " << getWeight() << " kg\n - Van toc: " << getSpeed() << " km/h" << endl;
    }
};

Như này đúng chưa @kisuluoibieng

vê idea thì đúng rồi đó, đã đáp ứng được 2 và 3
còn ý 1 thì không rõ ràng lắm, nhập tên trước rồi dựa theo tên để nhập loài động vật tương ứng?

có thể enhance một chút
thêm abstract method getName() (hoặc property, tuỳ bạn) để lấy tên con vật
và implement hàm show trong base class luôn

// base class
void show() {
    cout << “Con " +  getName() + " co\n - Chieu dai " << dimension << " m\n - Can nang " << getWeight() << " kg\n - Van toc " << getSpeed() << " km/h” << endl;
}

// child class
int getName() {
    return "cho";
}

As requested

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