隐藏struct具体实现细节
我们知道对于struct,其所有的成员默认情况下是所有对外可见的,即为public属性。但是有时候为了提高程序的封装性,我们需要将struct的内容细节隐藏起来,怎么做呢?可以使用下面这种做法达到目的。
// a.h typedef struct A At; class Test { public: Test(int a); int Get(); At* _a; };
// a.cpp #include "a.h" typedef struct A { int a; } At; Test::Test(int a_) { _a = new At; _a->a = a_; } int Test::Get() { return _a->a; }
// main.cpp #include "a.h" #include <iostream> int main() { Test t(10); std::cout << t.Get() << std::endl; }
上述的实现方式归根结底就是将实现定义在cpp中,而.h中只做声明。这样外部直接使用struct的成员的时候会报错是不完整的类型,所以此时就达到了隐藏的目的,强制我们通过类中的预定义函数Get()进行访问结构体。
上一篇:
IDEA上Java项目控制台中文乱码