这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
当前回答
另一件需要注意的事情是,如果你更新了一个有结构的遗留应用程序来使用类,你可能会遇到以下问题:
旧代码有结构,代码被清理,这些被更改为类。 然后将一两个虚函数添加到新更新的类中。
当虚函数在类中时,编译器会在内部添加额外的指针指向类数据,以指向函数。
这将如何打破旧的遗留代码是,如果在旧代码中的某个地方使用memfill将结构清除为零,这也将破坏额外的指针数据。
其他回答
其他答案提到了private/public默认值(但请注意,struct是类是struct;它们不是两个不同的项目,只是同一项目的两种定义方式)。
值得注意的是(特别是因为请求者提到“非托管”c++,所以很可能正在使用msvc++),在某些情况下,如果一个类用class声明,然后用struct定义(或者可能相反),visualc++会抱怨,尽管标准说这是完全合法的。
结构和类之间有3个基本区别
第1 -内存是为堆栈内存中的结构保留的(这接近于编程语言),无论堆栈内存中的类是仅为引用保留的,实际内存是在堆内存中保留的。
默认情况下,结构对待公共类是否对待私有类。
第三,不能在结构中重用代码,但在类中我们可以多次重用相同的代码,称为继承
类的成员默认为private。Struct的成员默认为public。除此之外,没有其他区别。还有这个问题。
另一个主要区别是模板。据我所知,你可以在定义模板时使用类,但不能定义结构。
template<class T> // OK
template<struct T> // ERROR, struct not allowed here
唯一的其他区别是类和结构的默认继承,不出意外,它们分别是私有和公共的。