IP地址类
2016-04-03 13:45
162 查看
问题及代码:
运行结果:
/*copyright烟台大学计算机与控制工程学院 *文件名称:IP地址类 *作者:马艳艳 完成日期:2016年4月3日 *问题描述:通过创建IP地址类进行对地址的深步探究 *输入描述:对已给的ip地址输入, 输出描述:所的答案’ 提示,这是一个错误的程序,定义给的一个IP地址分成四段,为char型,输出数字要进行强制类型转换,但始终输出为0.求挑错; */ #include <iostream> #include<cstring> using namespace std; class IP { private: union//由此匿名联合体中可以看出IP地址占用四个字节 { struct//这是一个由四个字节构成的匿名结构体 { unsigned char seg0; unsigned char seg1; unsigned char seg2; unsigned char seg3; };//四个字节看做四个部分,每部分一个字节 unsigned int address; //四字节的IP地址可以看成一个4字节的整体 }; public: void set_IP(int ,int ,int ,int ); IP(int=0,int=0,int=0,int=0);//构造函数 void showIP();//用四段法显示IP地址 bool is_samesubnet(const IP&ip,const IP&mark);//判断是否处于同一子网 char whatkind();//返回属于哪一类网络 }; //成员函数的实现: IP::IP(int s0,int s1,int s2,int s3)//构造函数的过程可以简单理解为变量给私有成员赋值的过程 { seg0=s0; seg1=s1; seg2=s2; seg3=s3; } void IP:: set_IP(int s0,int s1,int s2,int s3)//设置名称的时候注意格式展开内容 { char ch='.'; cout<<"请输入IP地址(格式xxx.xxx.xxx.xxx):"<<endl; cin>>s0>>ch>>s1>>ch>>s2>>ch>>s3; while(1) { if(ch!='.') cout<<"格式错误,请重新输入"<<endl; else break; } } void IP::showIP() { char ch='.'; cout<<int(seg0)<<ch<<int(seg1)<<ch<<int(seg2)<<ch<<int(seg3)<<endl;//定义为char型,所以要进行强制类型转换。 } bool IP::is_samesubnet(const IP&ip,const IP&mark)//认为这里好难怎么都算不出来,不懂是怎么操作的。 { unsigned int t1,t2; t1=address&mark.address; t2=ip.address&mark.address;//此处是借用老师的算法。 if(t1==t2) return true; else return false; } char IP::whatkind()//判断所给IP地址为哪一种网络; { if( seg0>=0 && seg0<=126)//求范围的时候找到一个最强的限制条件即可。 return 'A'; else if( seg1>=128 && seg1<=191 ) return 'B'; else if( seg2>=192 && seg2<=223 ) return 'C'; else if( seg3>=224 && seg3<=239 ) return 'D'; else return 'E'; } int main() { IP ip1,ip2,mark; ip1. set_IP(202,194,119, 110); ip2.set_IP(255,189,116,97); mark.set_IP(234,194,102,112); cout<<"ip1:"; ip1.showIP(); cout<<"ip2:"; ip2.showIP(); if(ip1.is_samesubnet(ip2,mark)) cout<<"两个IP在同一子网"<<endl; else cout<<"两个IP不在同一子网"<<endl; cout<<"ip1属于"<<ip1.whatkind()<<"类网络"<<endl; return 0; }
运行结果:
相关文章推荐
- ssm框架理解
- Android—— Intent参数this问题
- Android——控件AutoCompleteTextView 自动提示
- [mysql] mysql主从复制(基于日志点)
- 错误处理与调试
- 自动化新闻写作机器人:会不会导致记者失业
- BJTU 1688 Quartz的宝藏
- 例程4. SPI_LCD -- 慕司板IAP
- jcmd命令使用
- Android——TextView属性XML详解
- Android—— TextView文字链接4中方法
- 关于字符串 “*****AB**C*D*****” 中前缀、后缀和中间 '*' 的处理
- 蛇形线的作用
- 问题
- Ubuntu15.10下制作Linux 操作系统优盘启动盘
- ACM程序设计选修课——1065: Operations on Grids(暴力字符串)
- Ubuntu15.10下制作Linux 操作系统优盘启动盘
- lintcode-medium-Paint House
- Android键盘面板冲突 布局闪动处理方案
- 关于python opencv使用