请设计一个IP地址类,该类存储一个IP地址及对应的子网掩码信息。通过下面写好的main函数来使用IP地址类。 int main(){ int n,m; cin>>n>>m; IPAddr myip(n,m); myip.showIPInfo(); return 0; } 输入描述 输入一个整数n和一个4~30之间的正整数m,使用n来初始化IP地址(IP地址的二进制表示和n一摸一样),使用m来初始化子网掩码,m代表子网掩码中1的个数 输出描述 分三行分别输出IP地址、子网掩码和网络地址的点分十进制形式 提示 你需要提交除了main函数之外的其他代码。注意输入的n可能是一个负数 样例输入:-1455049865 24 样例输出:169.69.179.119 255.255.255.0 169.69.179.0
时间: 2024-02-07 14:03:41 浏览: 136
根据题目要求,我们可以设计一个 IPAddr 类来存储 IP 地址和子网掩码信息,该类包含以下成员函数:
- 构造函数:使用一个整数 n 和一个正整数 m 分别初始化 IP 地址和子网掩码
- showIPInfo 函数:输出 IP 地址、子网掩码和网络地址的点分十进制形式
下面是 IPAddr 类的实现代码:
```
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
class IPAddr {
private:
bitset<32> ip; // 存储 IP 地址的二进制表示
bitset<32> mask; // 存储子网掩码的二进制表示
public:
IPAddr(int n, int m) {
// 将 IP 地址的二进制表示初始化为 n
ip = bitset<32>(n);
// 将子网掩码的二进制表示初始化为 m 个 1 和 (32 - m) 个 0
mask = (bitset<32>(-1) << (32 - m));
}
// 将二进制数转换为点分十进制形式
string toIPAddress(bitset<32> bin) {
string res;
for (int i = 0; i < 4; i++) {
bitset<8> byte(bin.to_ulong() >> (24 - 8 * i));
res += to_string(byte.to_ulong());
if (i < 3) {
res += '.';
}
}
return res;
}
void showIPInfo() {
cout << toIPAddress(ip) << endl;
cout << toIPAddress(mask) << endl;
bitset<32> network = ip & mask; // 计算网络地址
cout << toIPAddress(network) << endl;
}
};
```
在 main 函数中,读取输入的整数 n 和正整数 m,然后使用它们来初始化 IPAddr 类的一个对象 myip,最后调用 myip 的 showIPInfo 函数输出 IP 地址、子网掩码和网络地址的点分十进制形式。下面是完整的 main 函数代码:
```
int main() {
int n, m;
cin >> n >> m;
IPAddr myip(n, m);
myip.showIPInfo();
return 0;
}
```
阅读全文