隐藏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项目控制台中文乱码
