在C ++中使用struct作为派生类的基础

时间:2010-01-31 13:57:18

标签: c++ c casting

是否有可能从结构继承一个类?

更具体地说,我如何用类包装C结构,以便我可以将类指针传递给需要struct ptr的方法,并在我收到指针时将其转换回来。回调?

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

3 个答案:

答案 0 :(得分:4)

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

如果仅涉及单个继承,则class的地址应与充当基类的struct相同。如果继承仅用于实现(即两者之间没有Is-A关系),请考虑使用私有继承。

答案 1 :(得分:2)

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

在BO中包装结构A的方法的选择是OO设计中常见的: B是A:使用继承 B包含A,使用Composition:make A是B的成员。

答案 2 :(得分:2)

根据定义,struct是一个默认公共成员的类;就是这样,

struct person
{
};

等于:

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

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

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

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

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

表示私人继承(即员工在关系方面的实施,员工与个人之间没有隐含的转换)。

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