不同文件的类声明

class declaration over different files

本文关键字:声明 文件      更新时间:2023-10-16

我无法在这个站点上找到类似的问题,但是是否可以在两个不同的文件上声明一个类。

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

公众.h

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

私人.h

    class test {
     private:
        int a;
    };

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

有一种方法可以得到非常相似的东西:私有继承。

// 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; }
};
请注意,您

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

不是那样的,但 pimpl 习语(或不透明的指针,或柴郡猫)可以帮助您实现类似的功能 - 您可以提供一个公共接口,其中所有实现详细信息都隐藏在实现成员中。

C++不支持分部类。

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

这是抽象基类的一个很好的用例

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