Xây dựng lớp tam giác và hình chữ nhật kế thừa từ lớp đa giác

Yêu cầu:

Chúng ta cần xây dựng các lớp mô tả đa giác : hình chữ nhật và tam giác. Hai đa giác này có đặc điểm cơ bản, như là chiều rộng và chiều cao để tính diện tích. Do vậy, ta có thể xây dựng 1 lớp đa giác (polygons) gồm các thành viên: width và height. Ta sẽ tạo ra 2 lớp dẫn xuất: lớp tam giác (CTriangle) và lớp hình chữ nhật (CRectangle) kế thừa từ lớp đa giác (CPolygon).

/************************************************************
* Author: VNCODING
* History                  
* 2014/11/28        first create    VNCODING
*************************************************************/

#include <iostream>
using namespace std;

class CPolygon 
{
protected:
    int width, height;
public:
    void set_values (int a, int b)
    { width=a; height=b;}
};

class CRectangle: public CPolygon 
{
public:
    int area () { return width * height; }
};

class CTriangle: public CPolygon 
{
public:
    int area () { return width * height / 2; }
};

int main () {
    CRectangle rect;
    CTriangle trgl;
    rect.set_values (4,5);
    trgl.set_values (4,5);
    cout << "Area of rectangle: " << rect.area() << endl;
    cout << "Area of triangle: " << trgl.area() << endl;
    
    system("pause");
    return 0;
}

Chú ý:

Ở đây, thành viên width và height được khai báo protected thay vì private. Vì thành viên của lớp dẫn xuất chỉ có thể truy cập được thành viên public và protected của lớp cơ sở.
Trong ví dụ này, thành viên của lớp CRectangle và CTriangle có cùng quyền truy cập như trong lớp cơ cở CPolygon.

CPolygon::width           // protected access
CRectangle::width         // protected access

CPolygon::set_values()    // public access
CRectangle::set_values()  // public access

Đó là bởi vì, trong ví dụ này ta dùng kiểu kế thừa public.

class Rectangle: public Polygon { /* ... */ }

Kết quả:

Xây dựng lớp tam giác và hình chữ nhật kế thừa từ lớp đa giác
Xây dựng lớp tam giác và hình chữ nhật kế thừa từ lớp đa giác

Be the first to comment

Leave a Reply

Your email address will not be published.

*