Answers:
在C中,没有类,因此struct
捆绑数据的方法也没有。在C ++中,除了默认情况下继承和成员访问权限是而不是之外,其他功能与之struct
相同。C#也有一种,但是我对C#的评论不够多。考虑到语言差异,Common Lisp具有这种形式,它尽可能地像C 一样工作,并且与Common Lisp Object System类不同。class
public
private
struct
defstruct
struct
但是,相关的数据包和真实的类之间存在概念上的区别,在C ++ struct
中,该数据包经常用于一组数据,而class
对于应该具有自己行为的对象则使用它。作为指导,我想说a class
代表您可以说有用的话,例如类不变式,而a struct
会更松散地与数据值结合,而实际上并不太依赖于其他值。
struct
和a 之间的区别class
更为明显-最大的问题是a struct
是值类型,而a class
是引用类型。struct
如果内容大于16个字节左右,Microsoft建议不要使用a 。
接受的答案是好的。我只想补充...。
有时最好在类中放置一个方法。在其他时候,最好有一个外部函数,其中将struct / class作为参数传递(即使您正在执行OOP样式)。
何时在类中放置方法的示例:Rectangle.CaclulateArea()
何时在类外放置函数的示例:Canvas.Draw(Rectangle rect)
您可以将Draw()放置在Rectangle中,它将起作用。但是绘图是依赖于层的操作。您不会在服务器端上画图,而会在客户端上画图。Draw()甚至在服务器上也没有意义。但是,“ CalculateArea()”与层无关,并且是矩形的真实属性,因此最好将其包含为成员方法。