如何在C ++中实现“也是”(扩展一种方法,用在E语言中)?

哈罗那

在我的程序中,我有3个类:GeneralHeader,MACHeader和IPHeader。MAC和IP标头是从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();
};

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

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

您能否指导我如何在C ++中实现它?

非常感谢您的帮助

杀人剂

你想要的是调用PrintMe父类的方法,GeneralHeaderPrintMe方法IPHeaderMACHeader这可以通过在方法调用之前加上父类来完成。例子:

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也只会调用如果使用C ++ 11,则可能要在派生类中声明方法,以确保它们确实重写了hIPHeaderoverrideGeneralHeader::PrintMe()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++中实现“也是”(扩展一种方法,用在E语言中)?

来自分类Dev

在Objective-C中的另一种方法中使用在一种方法中定义的变量

来自分类Dev

如何在Java(android)中的另一种方法中使用一种方法的变量

来自分类Dev

参数如何在C#中工作(一种方法据称隐藏了另一种方法)

来自分类Dev

参数如何在c#中工作(一种方法据称隐藏了另一种方法)

来自分类Dev

在C语言中,有没有一种方法可以计算出分配有空终止符的内存的大小?

来自分类Dev

在C语言中,有没有一种方法可以获取名称与字符串匹配的多个文件的大小?

来自分类Dev

如何在一种方法中重构两种相似的方法

来自分类Dev

如何在另一种语言中使用Django模板语言?

来自分类Dev

一种在C语言中非常有效(快速)的网络轮询的方法

来自分类Dev

为什么向下转换在C ++中是不好的习惯,而不是在另一种语言中?

来自分类Dev

为什么向下转换在C ++中是不好的习惯,而不是在另一种语言中?

来自分类Dev

在Laravel 5.2中如何在一种方法中设置会话并在另一种方法中获取会话数据

来自分类Dev

如何将一种方法中的变量用于另一种方法?

来自分类Dev

如何在SublimeText中映射扩展名(有没有一种方法可以将Sublime Text映射为将mjs视为js)

来自分类Dev

如何在Laravel中向所有控制器共享一种方法?

来自分类Dev

如何在一种方法中传递两个@RequestBody对象

来自分类Dev

如何在HTML标记行中调用require模块的一种方法

来自分类Dev

如何在使用一种方法附加的jquery中取消绑定事件?

来自分类Dev

稍后如何在另一种方法中利用用户输入

来自分类Dev

如何在一种方法中触发多个视图元素(React Native JS)

来自分类Dev

我如何实现一种方法,该方法返回收集和记录计数

来自分类Dev

C ++:我在一种方法中得到一个迭代器,如何在另一种方法中通过迭代器修改原始列表?

来自分类Dev

如何在Objective-C中将布尔值从一种方法发送到另一种方法

来自分类Dev

如何实现具有不同参数类型的一种方法?

来自分类Dev

如何实现具有不同参数类型的一种方法?

来自分类Dev

如何在java中将Int从一种方法返回到另一种方法

来自分类Dev

如何从C#中的另一种方法访问数组

来自分类Dev

如何使用 C# 中的一种方法修改不同的布尔属性?

Related 相关文章

  1. 1

    如何在C ++中实现“也是”(扩展一种方法,用在E语言中)?

  2. 2

    在Objective-C中的另一种方法中使用在一种方法中定义的变量

  3. 3

    如何在Java(android)中的另一种方法中使用一种方法的变量

  4. 4

    参数如何在C#中工作(一种方法据称隐藏了另一种方法)

  5. 5

    参数如何在c#中工作(一种方法据称隐藏了另一种方法)

  6. 6

    在C语言中,有没有一种方法可以计算出分配有空终止符的内存的大小?

  7. 7

    在C语言中,有没有一种方法可以获取名称与字符串匹配的多个文件的大小?

  8. 8

    如何在一种方法中重构两种相似的方法

  9. 9

    如何在另一种语言中使用Django模板语言?

  10. 10

    一种在C语言中非常有效(快速)的网络轮询的方法

  11. 11

    为什么向下转换在C ++中是不好的习惯,而不是在另一种语言中?

  12. 12

    为什么向下转换在C ++中是不好的习惯,而不是在另一种语言中?

  13. 13

    在Laravel 5.2中如何在一种方法中设置会话并在另一种方法中获取会话数据

  14. 14

    如何将一种方法中的变量用于另一种方法?

  15. 15

    如何在SublimeText中映射扩展名(有没有一种方法可以将Sublime Text映射为将mjs视为js)

  16. 16

    如何在Laravel中向所有控制器共享一种方法?

  17. 17

    如何在一种方法中传递两个@RequestBody对象

  18. 18

    如何在HTML标记行中调用require模块的一种方法

  19. 19

    如何在使用一种方法附加的jquery中取消绑定事件?

  20. 20

    稍后如何在另一种方法中利用用户输入

  21. 21

    如何在一种方法中触发多个视图元素(React Native JS)

  22. 22

    我如何实现一种方法,该方法返回收集和记录计数

  23. 23

    C ++:我在一种方法中得到一个迭代器,如何在另一种方法中通过迭代器修改原始列表?

  24. 24

    如何在Objective-C中将布尔值从一种方法发送到另一种方法

  25. 25

    如何实现具有不同参数类型的一种方法?

  26. 26

    如何实现具有不同参数类型的一种方法?

  27. 27

    如何在java中将Int从一种方法返回到另一种方法

  28. 28

    如何从C#中的另一种方法访问数组

  29. 29

    如何使用 C# 中的一种方法修改不同的布尔属性?

热门标签

归档