在C中,您可以像这样实现数据隐藏:
//Library header typedef struct foo* Alias; //other stuff.... //Library source, can be changed to whatever // as long as foo is defined struct foo{ int date; }; //(Type Alias -> date;// is accessible //then main class int main(){ Alias made; made -> date;// not accessable }
这是否意味着struct foo
或Alias
可以在多个源文件的情况下抑制多态行为?
答案 0 :(得分:3)
“... struct foo
或Alias
可以抑制多态行为?”
如果您指的是多态性(即基于在运行时中调用特定于实例的行为的面向对象概念),那么否,这是事实,库的实现将提供不同的struct
定义与多态无关,因为此行为在 编译时 中定义。
另请注意
typedef struct foo* Alias;
只为类型struct foo*
创建别名,隐藏 Alias
是指针的信息。
Alias made;
made -> date;
它实际上相当于:
struct foo* made;
made -> date;
除了取消引用未初始化的指针之外别无其他,这会导致未定义的行为。