不同文件的类声明

时间:2012-07-03 09:41:47

标签: c++ class declaration

我无法在此网站上找到类似的问题,但可以在两个不同的文件中声明一个类。

例如,文件和私有中的所有公共类组件以及不同文件中的其他组件。

publics.h

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

privates.h

    class test {
     private:
        int a;
    };

上述方式肯定是错误的,但有没有这样的方法。

3 个答案:

答案 0 :(得分:7)

有一种方法可以获得非常相似的东西: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; }
};

请注意,您仍然需要(间接)在使用公共类的任何模块中包含私有标头,因此您不会以任何方式隐藏任何内容。

答案 1 :(得分:4)

不是那样,但pimpl idiom (or opaque pointer, or Chesshire cat)可以帮助您实现类似的功能 - 您可以提供一个公共接口,其中所有实现细节都隐藏在实现成员中。

C ++不支持部分类。

另外,请注意您所拥有的是类定义,而不是声明。 C ++要求如果一个类的多个定义可用,它们必须相同,否则它是未定义的行为。

答案 2 :(得分:0)

这是抽象基类

的一个很好的用例
 //File test.h
 class test {
     public:
        virtual ~test() {}
        virtual int geta()=0;
        virtual oid 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;
    };