【发布时间】:2010-01-31 13:57:18
【问题描述】:
是否可以让类继承自结构?
更具体地说,如何将 C 结构与类包装在一起,以便我可以将类指针传递给需要 struct ptr 的方法,并在收到指针时回退,例如回调?
(或者更具体地说,类的地址应该与结构的地址相同......)
【问题讨论】:
是否可以让类继承自结构?
更具体地说,如何将 C 结构与类包装在一起,以便我可以将类指针传递给需要 struct ptr 的方法,并在收到指针时回退,例如回调?
(或者更具体地说,类的地址应该与结构的地址相同......)
【问题讨论】:
您只是从 C 结构派生而来。在 C++ 中,struct 和 class 之间的唯一区别是后者的默认成员可访问性是 private,而前者是 public。
如果只涉及单继承,class 的地址应该与作为基类的struct 的地址相同。如果继承只服务于实现(即两者之间没有 Is-A 关系),请考虑使用私有继承。
【讨论】:
是的,在 C++ 中,类是具有默认私有成员的结构,而结构是具有默认公共成员的类。因此,类可以从结构派生。
在类 B 中包装结构 A 的方法的选择是 OO 设计中的常用方法: B 是 A:使用继承 B 包含一个 A,使用组合:使 A 成为 B 的成员。
【讨论】:
根据定义,结构是一个类,其成员默认是公共的;也就是说,
struct person
{
};
等于:
class person
{
public: //...
};
另一个区别,默认情况下(没有显式访问修饰符)类继承意味着私有继承,而结构继承意味着公共继承。
struct person {...};
struct employee : person {...};
表示公共继承,即员工与人之间存在IS A关系和隐式转换;
class person {...};
class employee : person {...};
表示私有继承(即员工根据关系实现,员工与个人之间没有隐式转换)。
在您的情况下,类和结构是可以互换的;
【讨论】: