Tôi có một lớp cơ sở và một cơ sở kế thừa lớp. Lớp cơ sở có một số hàm ảo mà lớp thừa hưởng có thể ghi đè lên. Tuy nhiên, các hàm ảo trong lớp cơ sở có mã phải chạy trước khi ghi đè lớp thừa hưởng được gọi. Có một số cách mà tôi có thể gọi các lớp cơ sở chức năng ảo đầu tiên sau đó thừa kế lớp thừa kế. Không cần gọi hàm base.function().Chức năng cơ sở cuộc gọi sau đó được thừa kế chức năng
Tôi biết tôi chỉ đơn giản có thể tạo hai hàm, một hàm được gọi, hàm ảo khác. Nhưng có cách nào tôi có thể giữ cùng tên không? Tôi biết tôi có thể cần phải thay đổi một số thứ xung quanh.
class myBase
{
public virtual myFunction()
{ /* must-run code, Called first */ }
}
class myInherited : myBase
{
public override myFunction()
{ /* don't use base.myFunction();,
called from base.myFunction(); */ }
}
Câu hỏi tương tự here.
Có cách nào tôi có thể thực hiện việc này mà không cần thực hiện hai chức năng trong lớp cơ sở không?hoặc ít nhất làm cho họ có cùng tên? – Dave
@Dave: Không, không có cách nào để gọi một phương thức cơ bản được ghi đè trước hoặc sau cuộc gọi phương thức ảo một cách kỳ diệu. Bạn phải chia nó theo một cách nào đó. (Nếu bạn chia nhỏ nó, bạn cũng có thể thực thi một phương thức ghi đè gọi phương thức cơ sở được ghi đè, ngoài việc làm điều gì đó trước và sau phương thức được bảo vệ.) – dtb
Điều này còn được gọi là thành ngữ Giao diện Phi-ảo - http: // vi. wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface – sll