多态类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Since20140504/article/details/25393597

接口的多种不同的实现方式即为多态。通俗点说一种类型可以应对多种类型的操作。

C/C++中有多态类型有指针、union、模板、void*;多态类型在作为接口时有数据保护和隐藏的效果。

 

指针:

在具有继承关系的类中,通过将子类对象地址赋值给父类对象指针之后,父对象指针就可以根据当前赋值给它的子对象的特性以不同的方式执行。在C++中利用指针实现了面向对象语言的一个重要特性“多态”。

函数指针:

将回调函数注册给函数指针,函数指针就可以根据赋值给它的回调函数以不同的方式执行。在linux中,通过函数指针实现了文件系统对外接口。

 

模板

函数或类通过模板实现同一方法执行中多种不同类型(基本类型、自定义类型)。STL标准模板库)语言支持机制就是模板。

 

void *

任何类型的指针都可以直接赋值给void*void*也可强转成任何类型的指针。用于函数操作未知类型的数据。

 

union

union中所有的数据成员共用一个空间(最大数据成员的空间),同一时间只能储存其中一个数据成员;所有的数据成员具有相同的起始地址。

 

由于平日union用的较少,现列举一个union作为接口例子:

 

#include <iostream.h>

struct messageRequest1

{

  int msgId;

  int a;

  int b;

  int c;

};

struct messageRequest2

{

  int msgId;

  char a;

  char b;

  char c;

};

union SIGNAL

{

  int msgId;

  messageRequest1 msgreq1;

  messageRequest2 msgreq2;

  //msg3

  //msg4

};

int main()

{

  SIGNAL sig;

  sig.msgreq2.msgId = 2;

  

// 由于union中所有的数据成员具有相同的起始地址,我们通过union中的成员msgId就可以知道接口传递过来的那条msg,然后用对应的结构体可以解析出消息

  cout<<sig.msgId<<endl;

  return 1;

}


 

展开阅读全文

没有更多推荐了,返回首页