6 Stimmen

Klassen Deklaration über verschiedene Dateien

Ich kann keine ähnliche Frage auf dieser Website finden, aber ist es möglich, eine Klasse über zwei verschiedene Dateien zu deklarieren.

Zum Beispiel alle öffentlichen Klassenkomponenten in einer Datei und private und andere in einer anderen Datei.

publics.h

    class test {
     public:
        int geta();
        void seta(int); 
    };

privates.h

    class test {
     private:
        int a;
    };

Der obige Weg ist definitiv falsch, aber gibt es eine solche Methode.

0 Stimmen

7voto

Fred Foo Punkte 341230

Es gibt einen Weg, etwas Ähnliches zu bekommen: private Vererbung.

// private.hpp
class test_details {
  protected:
    int a;
};

// public.hpp

#include "private.hpp"

class test : private test_details {
  public:
    int geta() const { return a; }
    void seta(int i) { a = i; }
};

Beachten Sie, dass Sie immer noch den privaten Header in jedem Modul einbeziehen müssen, das die öffentliche Klasse verwendet, so dass Sie auf diese Weise eigentlich nichts verbergen.

6voto

Luchian Grigore Punkte 244505

Nicht so, aber das pimpl-Idiom (oder opaker Zeiger oder Chesshire-Katze) kann Ihnen helfen, eine ähnliche Funktionalität zu erreichen - Sie können eine öffentliche Schnittstelle bereitstellen, in der alle Implementierungsdetails in einem Implementierungsmitglied versteckt sind.

C++ unterstützt keine partiellen Klassen.

Bedenken Sie auch, dass das, was Sie dort haben, Klassendefinitionen sind, keine Deklarationen. C++ schreibt vor, dass bei mehreren Definitionen einer Klasse diese identisch sein müssen, sonst handelt es sich um undefiniertes Verhalten.

1voto

Michael Anderson Punkte 65535

Dies ist ein guter Anwendungsfall für eine abstrakte Basisklasse

 //Datei test.h
 class test {
     public:
        virtual ~test() {}
        virtual int geta()=0;
        virtual void seta(int)=0; 
    };

 //Datei test_impl.h
 class test_impl : public test {
     public:
        int geta() { return a; }
        void seta(int a ) { a = v; }
     private:
        int a;
    };

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X