
Nguyên bản được gửi bởi
rox_rook
Nếu được thì zkday2686 có thể giảng sơ cho mình cấu trúc của bài này được không ? Cho mình hỏi luôn : Đa Xạ trong OOP là gì thế nhỉ ? Ý mình không phải là xin code nhưng zkday2686 có thể gợi ý thêm cho mình tạo những lớp nào với những phương thức nào cần để mình có thể hình dung ra cấu trúc nó được không ? Cám ơn trước zkday2686 nhé !
1: trong C++ có một từ khóa là virtual thì đa xạ hiểu nôm na là cách dùng nó trong các lớp có mà lớp này được kế thừa từ lớp khác.
2: Thực tế vấn đề ở đây không phải là làm sao để vẽ được một đường cong với một hàm số nào đó được cho trước mà làm sao để chương trình biết khi nào cần dùng hàm tính f nào để tính.
trong đây thì mình viết 3 lớp cho lớp:CCurve, CCurve2, CCurve3;
để tiện cho việc nói mình xin code luôn trong class<cách này hơi bưởi>
Code:
class CCurve{
public:
CCurver();
virtual ~CCurve();
virtual double f(int x){
return 0.0;
}
}
class CCurve1 : public CCurve {
private:
double a,b;
public:
CCurve1();
CCurve1(double a, double b){
this->a = a;
this->b = b;
}
virtual ~CCurve1();
virtual double f(int x)
{
// cài đặt tính f đối với hàm số bậc 2;
double y;
y = a*x + b;
return y;
}
}
// cài đặt lớp cho hàm số y = a*x2 + b*x + c
class CCurve2 : public CCurve {
private:
double a,b,c;
public:
CCurve2();
CCurve2(double a, double b, double c){
this->a = a;
this->b = b;
this->c = c;
}
virtual ~CCurve2();
virtual double f(int x)
{
// cài đặt tính f đối với hàm số bậc 2;
double y;
y = x*(a*x + b) + c;
return y;
}
}
// cài đặt cho hàm số y=a*x3 + b*x2 + c*x + d;
class CCurve3 : public CCurve {
private:
double a,b,c,d;
public:
CCurve3();
CCurve3(double a, double b,double c, double d){
this->a = a;
this->b = b;
this->c = c;
this->d = d;
}
virtual ~CCurve3();
virtual double f(int x)
{
// cài đặt tính f đối với hàm số bậc 2;
double y;
y = x*(x*(a*x + b) +c) + d;
return y;
}
void Seta(int a){this->a = a;};
void Setb(int b){this->b = b;};
}
ở đây để tiện mình chọn trong hàm OnPaint()
Code:
// giả sử khi cần vẽ hàm bậc 2: y = 2*x2 + 3 thì vẽ như sau
CCurve *bac2;
bac2 = new CCurve2(2,0,3);
drawCurve2D(pDC, bac2, 0, 100, 50);
// vẽ hàm bậc 1: y = 2*x + 3
CCurve *bac1;
bac1 = new CCurve1(2,3);
drawCurve2D(pDC, bac1, 100, 200, 50);