gpt4 book ai didi

c++ - 如何在C++中实现 "is also"(扩展方法,如E语言)?

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:40 24 4
gpt4 key购买 nike

在我的程序中,我有 3 个类:GeneralHeader、MACHeader 和 IPHeader。 MAC 和 IP header 源自 General_Header:

//Headers.h

class GeneralHeader {
public:
bool Valid;
void PrintMe();
};

struct MACHeader: public GeneralHeader {
int DestMAC:48;
void PrintMe();
};

struct IPHeader: public GeneralHeader {
int Version;
void PrintMe();
};

我想实现 GeneralHeader 的 PrintMe() 以打印其所有成员,然后扩展 MACHeader 的 PrintMe() 方法以打印 MACHeader 的成员(所以 MACHeader.PrintMe() 将同时打印 GeneralHeader 和 MACHeader 成员)。 IPHeader 相同 - IPHeader.PrintMe() 将打印 GeneralHeader 和 IPHeader 成员。

在 E 语言 (AOP) 中,可以通过使用“is also”扩展 MACHeader 和 IPHeader 中的 PrintMe() 方法轻松完成。

能否指导我如何用 C++ 实现它?

非常感谢您的帮助

最佳答案

你想要的是调用PrintMe父类的方法GeneralHeader来自 PrintMe IPHeader的方法|和 MACHeader .这可以通过在方法调用前加上父类的前缀来完成。示例:

void IPHeader::PrintMe(){
GeneralHeader::PrintMe(); //Call the super method
std::cout << "Version: " << Version << std::endl; //Print IPHeader members
}

MACHeader的方法是类比的。

如果你有多态性,即你想调用 PrintMe通过父类的指针或引用调用派生类的方法,例如:

GeneralHeader* h = new IPHeader();
h->PrintMe();

那么你应该在GeneralHeader中声明这个方法类 virtual .否则,只有PrintMeGeneralHeader将在上面的代码中调用,即使 h实际上是一个 IPHeader .如果您使用 C++11,您可能希望在派生类中声明方法 override确保他们确实覆盖了 GeneralHeader::PrintMe() .

关于c++ - 如何在C++中实现 "is also"(扩展方法,如E语言)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22320205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com