【问题标题】:Use struct as base for derived class in C++在 C++ 中使用 struct 作为派生类的基础
【发布时间】:2010-01-31 13:57:18
【问题描述】:

是否可以让类继承自结构?

更具体地说,如何将 C 结构与类包装在一起,以便我可以将类指针传递给需要 struct ptr 的方法,并在收到指针时回退,例如回调?

(或者更具体地说,类的地址应该与结构的地址相同......)

【问题讨论】:

    标签: c++ c casting


    【解决方案1】:

    您只是从 C 结构派生而来。在 C++ 中,structclass 之间的唯一区别是后者的默认成员可访问性是 private,而前者是 public

    如果只涉及单继承,class 的地址应该与作为基类的struct 的地址相同。如果继承只服务于实现(即两者之间没有 Is-A 关系),请考虑使用私有继承。

    【讨论】:

      【解决方案2】:

      是的,在 C++ 中,类是具有默认私有成员的结构,而结构是具有默认公共成员的类。因此,类可以从结构派生。

      在类 B 中包装结构 A 的方法的选择是 OO 设计中的常用方法: B 是 A:使用继承 B 包含一个 A,使用组合:使 A 成为 B 的成员。

      【讨论】:

        【解决方案3】:

        根据定义,结构是一个类,其成员默认是公共的;也就是说,

        struct person
        {
        };
        

        等于:

        class person
        {
          public: //...
        };
        

        另一个区别,默认情况下(没有显式访问修饰符)类继承意味着私有继承,而结构继承意味着公共继承。

        struct person {...};
        struct employee : person {...}; 
        

        表示公共继承,即员工与人之间存在IS A关系和隐式转换;

        class person {...};
        class employee : person {...};
        

        表示私有继承(即员工根据关系实现,员工与个人之间没有隐式转换)。

        在您的情况下,类和结构是可以互换的;

        【讨论】:

          猜你喜欢
          • 2012-10-15
          • 1970-01-01
          • 2016-02-08
          • 1970-01-01
          • 2011-02-04
          • 2018-05-19
          • 1970-01-01
          • 2010-11-30
          • 2019-03-23
          相关资源
          最近更新 更多