user760613
user760613

Reputation:

class declaration over different files

I am not able to find a similar question else where on this site, but is it possible to declare a class over two different files.

for example, all public class components in a file and privates and others in a different file.

publics.h

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

privates.h

    class test {
     private:
        int a;
    };

The above way is definitely wrong, but is there any such method.

Upvotes: 6

Views: 2935

Answers (3)

Michael Anderson
Michael Anderson

Reputation: 73460

This is a good use case for an abstract base class

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

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

Upvotes: 1

Fred Foo
Fred Foo

Reputation: 363487

There is a way to get something quite similar: private inheritance.

// 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; }
};

Note that you will still need to (indirectly) include the private header in any module that uses the public class, so you're not really hiding anything this way.

Upvotes: 7

Luchian Grigore
Luchian Grigore

Reputation: 258548

Not like that, but the pimpl idiom (or opaque pointer, or Chesshire cat) can help you achieve similar functionality - you can provide a public interface where all implementation details are hidden in an implementation member.

C++ doesn't support partial classes.

Also, note that what you have there are class definitions, not declarations. C++ mandates that if multiple definitions of a class are available, they must be identical, otherwise it's undefined behavior.

Upvotes: 6

Related Questions