数据隐藏在C,多态行为?

时间:2013-10-09 14:57:35

标签: c struct polymorphism

在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 fooAlias可以在多个源文件的情况下抑制多态行为?

1 个答案:

答案 0 :(得分:3)

在给定多个源文件的情况下,

“... struct fooAlias可以抑制多态行为?”

如果您指的是多态性(即基于在运行时中调用特定于实例的行为的面向对象概念),那么,这是事实,库的实现将提供不同的struct定义与多态无关,因为此行为在 编译时 中定义。


另请注意

typedef struct foo* Alias;

只为类型struct foo*创建别名,隐藏 Alias指针的信息。

然后你做的时候:
Alias made;
made -> date;

它实际上相当于:

struct foo* made;
made -> date;

除了取消引用未初始化的指针之外别无其他,这会导致未定义的行为