this->method();
... gọi method
trên lớp có nguồn gốc (và cũng giống như viết đơn giản method();
). Điều này có thể gọi phương thức kế thừa từ cha mẹ (và trong ví dụ), hoặc nó có thể gọi một phiên bản ghi đè trong lớp con (và sẽ, nếu có).
SuperClass::method();
... sẽ luôn gọi phương thức trên cấp độ gốc. Cú pháp này thường được sử dụng trong một ghi đè trong đứa trẻ, khi bạn muốn giữ và mở rộng chức năng của phương thức lớp cha. Ví dụ.
Class SubClass: public SuperClass {
//...
void method() {
SuperClass::method();
//...
}
};
Lưu ý rằng nếu bạn sử dụng cú pháp đầu tiên trong trường hợp thứ hai này, bạn sẽ nhận được đệ quy.
Cũng lưu ý rằng điều này không liên quan gì đến phương thức virtual
. Đánh dấu một phương thức là virtual
có nghĩa là, khi phương thức được gọi thông qua một con trỏ lớp cơ sở, phương thức lớp dẫn xuất có sẵn nhất sẽ được gọi. Trong đoạn mã trên, nó không tạo ra sự khác biệt cho dù bất kỳ phương thức nào là ảo vì không có con trỏ lớp cơ sở nào tham gia.
Tôi không nghĩ rằng nó quan trọng nếu phương pháp là ảo. Điều gì xảy ra nếu hai cha mẹ có cùng phương pháp ảo nhưng đứa trẻ thì không? – sje397