zoukankan      html  css  js  c++  java
  • C++ 子类转父类 父类确定子类

    //父类有多个子类,子类强制转换为父类,根据子类在父类中的共有信息确定
    //被强制转换的是哪个子类
    #pragma once
    #include<iostream>
    #include<fstream>
    using namespace std;
    const int nBuffSize=1024;
    #define MAX_FILE_DIR_LENGTH 256 
    //各种消息的宏定义
    #define INVALID_MESSAGE -1     //无效的消息      
    #define MSG_FILE_NAME   1        //表示收发的是文件名
    #define MSG_FILE_LENGTH 2        //表示收发的是文件长度
    
    class CCMsg
    {
    public:
    	struct TMsgParent      //父消息
        {
    	  int msgID;
    	  TMsgParent(int msg=INVALID_MESSAGE):msgID(msg){}    //重点信息********************************
        };
        struct TMsgFileName:public TMsgParent       //文件名数据包
        {
    	   char fileName[MAX_FILE_DIR_LENGTH];
    	   TMsgFileName():TMsgParent(MSG_FILE_NAME){}       //重点信息**********************
        };
    	struct TMsgFileLength:public TMsgParent     //文件大小数据包
    	{
    		long fileLength;
    		TMsgFileLength():TMsgParent(MSG_FILE_LENGTH){}
    	};
    };
    //----------------------------------------------------------------------
    	//利用socket传输一个TMSG_FILELENGTH类型的结构体
    	 CCSDef::TMSG_FILELENGTH tMsgFileLength(g_lLength);
       ::send(sClient, (char*)(&tMsgFileLength), sizeof(CCSDef::TMSG_FILELENGTH), 0);
    //---------------------------------------------------------------------
    // 将传输来的信息强制转换为父结构体,根据父结构体的标识符来识别传输来的是哪个子结构体
       CCSDef::TMSG_HEADER *pMsgHeader;        //重点信息******************************
       int nRecv = ::recv(g_sClient, g_szBuff, MAX_PACKET_SIZE + 1, 0);
       pMsgHeader = (CCSDef::TMSG_HEADER*)g_szBuff;
       switch (pMsgHeader->cMsgID)       //重点信息*******************************
       {
         
         case MSG_FILELENGTH:    // 文件的长度
        {
            if (0 == g_lLength)
            {
               g_lLength = ((CCSDef::TMSG_FILELENGTH*)pMsgHeader)->lLength;
               printf("File Length: %d
    ", g_lLength);
            }
        }
        break;
         case MSG_FILENAME:     // 文件名
        {
           return AllocateMemoryForFile(pMsgHeader);
        }
         break;
       }

  • 相关阅读:
    IIS Admin Service安装
    Linux常用命令总结
    Mysql常用命令操作小结
    mysql常用操作
    初识linux
    python基础
    接口测试基础
    MYSQL笔记
    mysql使用存储函数批量添加数据
    linux的基础命令(博客使用测试中 更新中)
  • 原文地址:https://www.cnblogs.com/zztong/p/6695197.html
Copyright © 2011-2022 走看看