header.hNghị quyết của chức năng ảo với các thông số mặc định
#include <iostream>
using namespace std;
class A
{
public:
virtual void display(int i=5) { cout<< "Base::" << i << endl; }
};
class B : public A
{
public:
void display(int i=9) { cout<< "Derived::" << i << endl; }
};
source.h
#include <iostream>
#include "header.h"
using namespace std;
int main()
{
A * a = new B();
a->display();
A* aa = new A();
aa->display();
B* bb = new B();
bb->display();
}
đầu ra
Derived::5
Base::5
Derived::9
hiểu biết của tôi là các hàm tham số mặc định đã được giải quyết trong suốt thời gian biên dịch bằng cách sử dụng quá tải hàm. Các hàm ảo sau đó được giải quyết trong suốt thời gian chạy bằng cách sử dụng chức năng ghi đè.
Nhưng những gì đang xảy ra là một mớ hỗn độn.
Độ phân giải chức năng thực sự xảy ra ở đây như thế nào?
'độ phân giải lý luận mặc định được dựa trên loại tĩnh của đối tượng thông qua đó bạn gọi function' (ví dụ: dựa trên loại con trỏ). http://social.msdn.microsoft.com/Forums/en-US/90b9b8ee-ed5f-4ba8-93b5-612c4d906124/default-argument-and-inheritance-hierarchy –
Lưu ý rằng bạn có thể giải quyết vấn đề này bằng cách quá tải ảo chức năng với một hàm ảo khác mà không có tham số, mà "chuyển tiếp" tới một tham số có tham số.Giống như: trong Base 'virtual void display() {display (9); } 'và trong Derived' void display() {display (5); } ' – leemes