Ich habe nächsten Code:C++ Ich kann nicht verstehen, warum es „Vater Klasse statische Funktion“ nennen und nennt es nur Vater destructor
#include <iostream>
using namespace std;
class A{
public:
A() { cout << "A() ";}
virtual void f()=0;
virtual void g() { cout << "ag() ";}
static void h() { cout << "ah() ";}
void i() { cout << "ai() ";}
~A() { cout << "~A() "; }
};
class B: public A{
void f() { cout << "bf() ";}
public:
void g() { cout << "bg() ";}
};
class C: public B{
public:
static void h() { cout << "ch() "; }
void g() { cout << "cg() ";}
~C() { cout << "~C() ";}
};
void f1(){
B b;
C c;
b.h();
c.h();
A* arr[2] = { new B ,new C};
arr[0]->h();
arr[1]->h();
delete arr[0];
delete arr[1];
}
int main(){
f1();
return 0;
}
Ich kann nicht verstehen, warum es eine druckt() A() ah() ch() A() A() ah() ah() ~ A() ~ A() ~ C() ~ A() ~ A() und es wird nicht gedruckt A() A() ah() ch() A() A() ah() ch() ~ A() ~ A() ~ C() ~ A() ~ C(). Kann mir jemand helfen?
Sieht aus wie etwa 90% dieses Codes (und 90% der Ausgabe) hat nichts mit der Frage zu tun. –
TL; DR: Destruktoren sollten virtuelle, statische Funktionen können nicht virtuell sein. –
Respektieren Sie die Zeit der Menschen, die Ihnen hier helfen, und verbringen Sie ein wenig Zeit damit, die Teile zu entfernen, die Sie * nicht * verwirrend finden, bevor Sie nach dem Rest fragen. – Yakk