Vielleicht ich habe zwei Schnittstellen mit dem gleichen Funktionsnamen und Parameter, jedoch mit unterschiedlichen Rückgabewerte:C++ Wie multipliziert man Vererbungen von Interfaces mit unterschiedlichen Rückgabetypen?
struct A { virtual void foo() = 0; };
struct B { virtual int foo() = 0; };
Wie Klasse C zu definieren, das erbt diese Schnittstellen (wenn es natürlich möglich ist)? Zum Beispiel schreibe ich einige Pseudo-Code, der nicht kompiliert hat:
// this code is fake, it doesn't compiled!!
struct C : A, B
{
// how to tell compiler what method using if referenced from C?
using void foo(); // incorrect in VS 2012
// and override A::foo() and B::foo()?
virtual void foo() { std::cout << "void C::foo();\n"; } // incorrect
virtual int foo() { std::cout << "int C::foo();\n"; return 0; } // incorrect
}
// ... for use in code
C c;
A &a = c;
B &b = c;
c.foo(); // call void C::foo() when reference from C instance
a.foo(); // call void C::foo() when reference from A instance
b.foo(); // call int C::foo() when reference from B instance
Warum sollten Sie so etwas wollen? –
vielleicht besitzt er nicht A und B; muss aber C machen, das beides implementiert. Scheint eine vernünftige Frage – pm100
Das ist in C++ nicht möglich (nicht wie du es codiert hast). Funktionen werden anhand ihrer Parametertypen und nicht anhand ihrer Rückgabetypen identifiziert. –