Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 13040|Răspunde: 2

[C++] Tehnici pentru C++ de a extrage date de obiecte de clasă derivate atunci când se analizează date de fișiere XML...

[Copiază linkul]
Postat pe 16.01.2019 09:22:59 | | | |
Această postare a fost editată ultima dată de Summer la 2019-1-16 09:31

1. Care este problema tehnică ce trebuie rezolvată în acest articol?

Rezolvați problema din arta anterioară că, atunci când analizăm documente XML în limbajul C++, etichetele clasei de bază și datele de clasă derivate care apar în documentul XML original pot analiza doar datele clasei de bază conform tipului clasei de bază, conform metodei convenționale de analiză, dar nu pot analiza complet datele de clasă derivate.


2. Context tehnic

În arta anterioară, folosește boost::serializarea pentru a transfera clasele derivate cu un pointer de clasă de bază sau folosește BOOST_CLASS_EXPORT macro.

Ambele scheme de mai sus în tehnologiile existente se bazează pe mecanismul claselor abstracte, dar deoarece clasele abstracte nu pot fi instanțiate ca obiecte concrete care pot fi folosite, obiectele declarate ca clase de bază în documentele XML nu pot fi analizate. Prezenta invenție are scopul de a asigura că datele atât ale obiectului clasei de bază, cât și ale obiectului de clasă derivat marcat de obiectul de clasă de bază pot fi corect analizate și complet păstrate.


3. Schema tehnică prezentată în acest articol

Această lucrare nu folosește mecanismul clasei abstracte, ci introduce pointerul clasei de bază în clasa numită de clasa de bază, declară funcția de analiză a clasei de bază ca fiind o funcție virtuală și apelează funcția de analiză prin pointerul clasei de bază în procesul de analiză, pentru a aplica polimorfismul pentru a analiza și stoca dinamic datele, și în final asigură că datele atât ale obiectului clasei de bază, cât și ale obiectului de clasă derivat derivat din clasa de bază pot fi stocate în pointerul definit de clasa de bază.
Pași specifici:
Pasul 1: Cod C++ pentru a proiecta toate clasele care pot corespunde etichetelor de date din documentul XML ce urmează a fi analizate și pentru a analiza datele XML una câte una din etichetele de nivel superior.
Pasul 2: Pentru fiecare etichetă analizată, determinați dacă există alte etichete care moștenesc eticheta ca clasă de bază, adică dacă tipul etichetei derivă alte tipuri de etichete;
Pasul 3: Dacă se stabilește că eticheta curentă nu este moștenită ca clasă de bază, analizează eticheta curentă conform pașilor normali de analiză.
Pasul 4: Dacă se stabilește că eticheta curentă este moștenită ca o clasă de bază, se determină suplimentar dacă conținutul descris de eticheta clasei de bază este subordonat obiectului clasei de bază sau unui obiect de clasă derivat;
Pasul 5: Dacă conținutul etichetei clasei de bază curente este determinat să descrie obiectul clasei de bază, analizați eticheta curentă conform pașilor normali.
Pasul 6: Dacă conținutul curent al etichetei clasei de bază descrie obiectul de clasă derivat, modificați codul pentru a analiza conform noii metode de analiză: modificați structura de date a tipului anterior care definește obiectul de clasă de bază și definiți în schimb pointerul clasei de bază; Modificați funcția de parsing a clasei de bază și declarați-o ca fiind o funcție virtuală;
Pasul 7: Unde obiectul clasei de bază a fost inițial definit pentru analiză sintonizată, în schimb este definit pointerul clasei de bază, iar tipul specific de memorie îi este alocat conform tipului descris de conținutul etichetei, iar pointerul clasei de bază este folosit pentru a chema funcția de analiză pentru a analiza eticheta curentă.
Pasul 8: Analizează și redă eticheta curentă pentru a determina dacă mai există etichete de analizat;
Pasul 9: Dacă se stabilește că nu există etichete de analizat, înseamnă că analiza a fost finalizată și datele au fost salvate în clasa cu cea mai înaltă etichetă a documentului XML corespunzător din clasa C++.
Pasul 10: Dacă se stabilește că mai există etichete care nu au fost rezolvate, analizează următoarea etichetă conform pasului 2.

Diagramă de flux atașată

4. Rezumat

C++ introduce un pointer de clasă de bază pentru a atribui obiecte de tipul corespunzător conținutului etichetei XML în funcție de faptul dacă este o clasă de bază sau o clasă derivată, și folosește pointerul de clasă de bază definit pentru a chema o funcție de analiză declarată ca funcție imaginară pentru a analiza conținutul etichetei de clasă de bază XML. Astfel, când eticheta de clasă de bază XML descrie datele obiectului clasei de bază, funcția de analizare a clasei de bază va fi apelată dinamic conform polimorfismului din C++, iar datele de clasă de bază descrise de eticheta de clasa de bază pot fi corect analizate și păstrate. Când eticheta de clasă de bază XML descrie datele de obiect de clasă derivate, funcția de analizare a claselor derivate va fi apelată dinamic conform polimorfismului din C++, iar datele de clasă derivate descrise de eticheta de clasă de bază pot fi, de asemenea, corect analizate și păstrate.





Precedent:Tutorial pentru analiza protocolului QQ pentru Android/PC
Următor:Demon Spirit Summon V4.1.8 este folosit într-un mod discret
Postat pe 16.01.2019 09:26:40 |
Diagrama de flux a dispărut
 Proprietarul| Postat pe 16.01.2019 09:31:49 |
Publicat la 2019-1-16 09:26
Diagrama de flux a dispărut

Diagrama de flux adaugă, știi
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com