by Anonymous » 09 Mar 2025, 13:34
Betrachten Sie den folgenden C ++ - Code: < /p>
Code: Select all
class A
{
public:
int i;
}
class B: virtual public A{};
class C: virtual public A{};
class D: public B, public C{};
int main()
{
D obj;
obj.i = 0;
return 0;
}
< /code>
Der Code ist das klassische Beispiel für die Diamantstruktur der virtuellen Vererbung. Mein Anliegen ist, warum wir das Wort Virtual
mit Klasse B und c verwendet haben? Das Schlüsselwort hat keinen Einfluss auf die Klassen. Wenn ich die Klasse B oder c schreibe, denke ich nicht darüber nach, sie später als Basisklasse einer abgeleiteten Klasse zu verwenden, und selbst ich weiß möglicherweise nicht, dass die Klassen B oder c Geschwister haben. Ich muss also das Schlüsselwort hinzufügen, der zu ihnen zurückkommt, wenn ich die Klasse D implementieren werde. Dies scheint mir nicht intuitiv zu sein. Warum ich die Klasse B oder c stören muss, wenn sie keine Bedenken hinsichtlich der hier entwickelten Diamantstruktur haben. Für mich ist das Folgende logisch: < /p>
Code: Select all
class A
{
public:
int i;
}
class B: public A{};
class C: public A{};
class D: virtual public B, virtual public C{};
Hier habe ich das Keyword Virtual hinzugefügt, als ich feststellte, dass sich dort eine Diamantstruktur weiterentwickelt. Kann jemand sagen, was das Motiv oder die Vorstellungskraft hinter solchem Design war?
Betrachten Sie den folgenden C ++ - Code: < /p>
[code]class A
{
public:
int i;
}
class B: virtual public A{};
class C: virtual public A{};
class D: public B, public C{};
int main()
{
D obj;
obj.i = 0;
return 0;
}
< /code>
Der Code ist das klassische Beispiel für die Diamantstruktur der virtuellen Vererbung. Mein Anliegen ist, warum wir das Wort Virtual [/code] mit Klasse B und c verwendet haben? Das Schlüsselwort hat keinen Einfluss auf die Klassen. Wenn ich die Klasse B oder c schreibe, denke ich nicht darüber nach, sie später als Basisklasse einer abgeleiteten Klasse zu verwenden, und selbst ich weiß möglicherweise nicht, dass die Klassen B oder c Geschwister haben. Ich muss also das Schlüsselwort hinzufügen, der zu ihnen zurückkommt, wenn ich die Klasse D implementieren werde. Dies scheint mir nicht intuitiv zu sein. Warum ich die Klasse B oder c stören muss, wenn sie keine Bedenken hinsichtlich der hier entwickelten Diamantstruktur haben. Für mich ist das Folgende logisch: < /p>
[code]class A
{
public:
int i;
}
class B: public A{};
class C: public A{};
class D: virtual public B, virtual public C{};
[/code]
Hier habe ich das Keyword Virtual hinzugefügt, als ich feststellte, dass sich dort eine Diamantstruktur weiterentwickelt. Kann jemand sagen, was das Motiv oder die Vorstellungskraft hinter solchem Design war?