nicht deklariert Ist es möglich, Vererbung zwischen zugrunde liegenden Typ (zB B
und C
) von 2 Variablen (zB b
und c
) zu überprüfen, ob beide nicht in den Anwendungsbereich erklärt ?Check Vererbung von dynamischen Typen von 2 Variablen - aber sie sind in ihrem Umfang
Ich denke, das ist unmöglich, aber ich bin mir nicht sicher.
test1.h: -
#include <vector>
class A{};
std::vector<A*> test1();
Test1.cpp: -
#include "Test1.h"
class B : public A{};
class C : public B{};
class D : public A{};
std::vector<A*> test1(){
A* b=new B(); A* c=new C(); A* d=new D();
std::vector<A*> re;
re.push_back(b); re.push_back(c); re.push_back(d);
return re;
}
test2.cpp; Man beachte, dass B
C
D
sind hier nicht bekannt ist (durch Design): -
#include "Test1.h"
int test2(){
std::vector<A*> v=test1();
A* b=v[0]; A* c=v[1]; A* d=v[2];
isInherit(b,c); //true
isInherit(c,d); //false
isInherit(b,d); //false
}
Lautet die Antwort ja, bitte zeigen, wie bool isInherit(A* base,A* derive){}
zu codieren.
Beachten Sie, dass das Ändern von class A
nicht zulässig ist.
(So zu setzen ein Hack a non-static field of A
= a value depending on type
ist nicht erlaubt.)
ich es als einige Arten von black-magic in meinem Code verwenden.
Ich verstehe nicht, wie Ihre Typen unvollständig sind. In Ihrem Beispiel sind Ihre Typen definiert. Wenn Sie die Typen stattdessen weiterleiten, können Sie keine Vererbung angeben. –
@ François Andrieux Zu 'Test2.cpp':' B' 'C'' D' sind unvollständig. (Falsch?) – javaLover
Eine [unvollständige Klasse] (http://en.cppreference.com/w/cpp/language/type#Incomplete_type) hat eine spezifische Bedeutung in C++. Es gibt eine Klasse an, die deklariert, aber nicht definiert wurde. In 'Test2.cpp' wurde keiner von' B', 'C' oder' D' deklariert. –