第六周项目3—IP地址类

来源:互联网 发布:连接linux服务器工具 编辑:程序博客网 时间:2024/06/14 11:45

*All rightreserved. 

 *文件名称:test.cpp 

 *作   者:张明宇

 *完成日期:2016年4月10日 

 */

问题及代码:

  在互联网中使用的IP地址占4字节,可以用四段发表示,每段值得范围为0~255,中间用“.”隔开,列入202.194.116.97。其实,也可以看看一个有4字节的无符号整型值3401741409.

  现设计一个IP地址类,用于保存IP地址,并实施在IP地址上的一些操作。如下所示;

class IP{private:    union //由此匿名联合体可以看出,IP地址共占4个字节    {        struct //这是一个由4个字节构成的匿名结构体        {            unsigned char seg0;            unsigned char seg1;            unsigned char seg2;            unsigned char seg3;        };  //4字节的IP地址可以看作4部分,每部分1字节        unsigned int address; //4字节的IP地址可以看成一个4字节的整体    };public:    IP(int=0,int=0,int=0,int=0);  //构造函数    void showIP();  //用四段法显示IP地址    bool sameSubnet(const IP &ip, const IP &mark);  //判断是否处于同一子网    char whatKind();  //返回属于哪一类网络};//实现成员函数
#include <iostream>using namespace std;class IP{private:    union    {        struct        {            unsigned char seg0;            unsigned char seg1;            unsigned char seg2;            unsigned char seg3;        };  //IP地址共4字节,或者看成结构体所指4部分        unsigned int address; //或者看成一个整体    };public:    IP(int=0,int=0,int=0,int=0);  //构造函数    void showIP();  //用四段法显示IP地址    bool sameSubnet(const IP &ip, const IP &mark);  //判断是否处于同一子网    char whatKind();  //返回属于哪一类网络};IP::IP(int s0,int s1,int s2,int s3){    //下面赋值的顺序,涉及整型数据存储结构,参考[《整型数据在内存中如何存储?》](http://blog.csdn.net/sxhelijian/article/details/51015706)    seg3=s0;    seg2=s1;    seg1=s2;    seg0=s3;}void IP::showIP(){    //显示结果,是给人看的,分4段合适    cout<<int(seg3)<<"."<<int(seg2)<<"."<<int(seg1)<<"."<<int(seg0)<<endl;    return;}bool IP::sameSubnet(const IP &ip, const IP &mark){    //与子网掩码按位与,是计算机内部的操作,直接以一个整体操作更方便    unsigned int i1, i2;    i1=address&mark.address; //和子网掩码作逻辑与运算    i2=ip.address&mark.address; //和子网掩码作逻辑与运算    return (i1==i2); //与子网掩码的逻辑与运算结果相同,则属于同一子网}char IP::whatKind(){    //IP地址的类型,请到百度百科中搜索《IP地址》    if(seg3<128)        return 'A';    else if(seg3<192)        return 'B';    else if(seg3<224)        return 'C';    else if(seg3<240)        return 'D';    else        return 'E';}int main(){    IP ip1(202,194,116,97), ip2(202,194,119,102), mark(255,255,248,0);    cout<<"ip1: ";    ip1.showIP();    cout<<"ip2: ";    ip2.showIP();    if(ip1.sameSubnet(ip2,mark))        cout<<"两个IP在同一子网"<<endl;    else        cout<<"两个IP不在同一子网"<<endl;    cout<<"ip1属于"<<ip1.whatKind()<<"类网络"<<endl;    return 0;}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米手机忘记手势密码怎么办 捡到苹果手机怎么办才能自己用 日语会读不会写怎么办 手术后nbp过低怎么办 我的手破了怎么办英文 平板手机屏坏了怎么办 他很优秀我该怎么办 洗澡的花洒漏水怎么办 高三了文科成绩很差怎么办 骑缝章最后一页没盖全怎么办 机票取早了没有登机口怎么办 机票早订比晚订贵怎么办? 孩子考差了父母怎么办 保险公司不给业务员办退司怎么办 我不习惯没有你我怎么办 锁坏了打不开了怎么办 要上班老人生病无人照顾怎么办 苹果手机一直说英文怎么办 公司很抠门怎么办英文怎么说 过了截港时间怎么办 截关日期是假日怎么办 恒温阀冷水进水堵塞怎么办 缺氧液泵管道堵塞怎么办 货物包装大集装箱装不下怎么办 微信收藏的视频格式错误怎么办 乙方被刑拘房租未付清怎么办 房贷银行卡号弄错怎么办 社保卡号弄错了怎么办 社保名字写错了怎么办 档案和身份证年龄姓名不一样怎么办 档案年龄与身份证年龄不一样怎么办 户口本身份证和档案不一样怎么办 如果档案姓名与身份证不符怎么办 感冒吃了白参怎么办 吃辣的嗓子疼怎么办 美团客户更改地址怎么办 忘记steam的账户名称怎么办 重置手机忘了密码怎么办 sp下行短信费扣怎么办 hr公司业务员招不到人怎么办 卖房中介被房倒压房子怎么办