tôi có ba lớp cơ sở khác nhau:hàm C++ trọng
class BaseA
{
public:
virtual int foo() = 0;
};
class BaseB
{
public:
virtual int foo() { return 42; }
};
class BaseC
{
public:
int foo() { return 42; }
};
sau đó tôi lấy được từ cơ sở như thế này (thay thế X cho A, B hoặc C):
class Child : public BaseX
{
public:
int foo() { return 42; }
};
thế nào là chức năng ghi đè trong ba lớp cơ sở khác nhau? Ba giả định sau đây của tôi có đúng không? Có bất kỳ cảnh báo nào khác không?
- Với BaseA, lớp con không biên dịch, hàm ảo thuần túy không được xác định.
- Với BaseB, chức năng trong trẻ được gọi khi gọi foo trên BaseB * hoặc Child *.
- Với BaseC, chức năng trong trẻ được gọi khi gọi foo trên Child * nhưng không phải trên BaseB * (chức năng trong lớp cha được gọi).
Có lý do cụ thể nào khiến tôi không muốn làm điều này không? Mặc dù tôi không thể, ngược lại, đưa ra một ví dụ mà tôi muốn * để làm điều đó. Có lý do kỹ thuật hay nó chỉ được coi là "thực hành xấu"? – Mizipzor
Tôi không thấy bất kỳ lý do kỹ thuật nào .. nhưng nó thực sự khó hiểu. – Naveen
@mizipzor Có thể bạn đang thừa hưởng các lớp của một số người khác, nhưng bạn không có mã của họ. Không phải là một thiết kế lý tưởng nhưng nó có thể xảy ra. – Kae