您的位置:首页 > 其它

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;

}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: