Tôi gặp sự cố với chức năng final
. Tôi muốn "dừng" sự đa hình trong một lớp nhưng tôi vẫn muốn tạo ra cùng một hàm trong một lớp dẫn xuất.Có thể có một lớp dẫn xuất thừa hưởng hàm cuối cùng nhưng tạo ra cùng một hàm (không ghi đè) không?
Something như thế này:
class Base{
protected:
int _x, _y;
public:
Base(int x = 0, int y = 0) : _x(x), _y(y){};
int x() const { return _x; }
int y() const { return _y; }
virtual void print()const{ cout << _x*_y << endl; }
};
class Derived : public Base{
public:
Derived(int x = 0, int y = 0) : Base(x, y){}
void print()const final { cout << _x*_y/2.0 << endl; } // final inheritance
};
class NonFinal : public Derived{
void print()const{ cout << "apparently im not the last..." << endl }
// here i want a new function. not overriding the final function from Derived class
};
Theo nguyên tắc chung, tôi sẽ gọi lỗi thiết kế trên mã ẩn các thành viên được kế thừa (ngoại trừ rõ ràng là ghi đè hàm ảo được thừa kế). Tôi sẽ đề nghị gọi phương thức khác trong 'NonFinal'. Nếu bạn thấy mình cần phải làm điều này, một cái gì đó về thiết kế OO của bạn là xấu. – cdhowie