header.hRozdzielczość funkcji wirtualnego z domyślnymi parametrami
#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();
}
wyjście
Derived::5
Base::5
Derived::9
Moje zrozumienie to domyślne funkcje parametrów zostały rozwiązane podczas kompilacji przy użyciu przeciążenia funkcji. Wirtualne funkcje zostały następnie rozwiązane w czasie wykonywania za pomocą nadpisywania funkcji.
Ale to, co się dzieje, to bałagan.
Jak działa tutaj funkcja rozwiązywania problemów?
'Domyślna rozdzielczość argument opiera się na statycznym typu obiektu, przez którą nazywamy zakresie funkcji (tj na podstawie typu wskaźnika). http://social.msdn.microsoft.com/Forums/pl-PL/90b9b8ee-ed5f-4ba8-93b5-612c4d906124/default-argument-and-inheritance-hierarchy –
Pamiętaj, że możesz obejść ten problem przez przeciążenie wirtualnego funkcja z inną wirtualną funkcją bez parametru, która "przesyła dalej" do tej z parametrem.Podobnie jak: w Base 'virtual void display() {display (9); } 'and in Derived' void display() {display (5); } ' – leemes