这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
这个问题已经在c# /. net上下文中提出过了。
现在我想学习c++中结构体和类的区别。请讨论在OO设计中选择一种或另一种的技术差异以及原因。
我将从一个明显的区别开始:
如果没有指定public:或private:,结构体的成员默认为public;默认情况下,类的成员是私有的。
我敢肯定,在c++规范的晦涩角落里还会发现其他不同之处。
当前回答
另一件需要注意的事情是,如果你更新了一个有结构的遗留应用程序来使用类,你可能会遇到以下问题:
旧代码有结构,代码被清理,这些被更改为类。 然后将一两个虚函数添加到新更新的类中。
当虚函数在类中时,编译器会在内部添加额外的指针指向类数据,以指向函数。
这将如何打破旧的遗留代码是,如果在旧代码中的某个地方使用memfill将结构清除为零,这也将破坏额外的指针数据。
其他回答
虽然其他答案暗示了这一点,但并没有明确提到——结构体是与C兼容的,这取决于用法;课程不是。
这意味着如果你想要编写一个与C兼容的头文件,那么除了struct(在C世界中不能有函数;但可以有函数指针)。
另一个主要区别是模板。据我所知,你可以在定义模板时使用类,但不能定义结构。
template<class T> // OK
template<struct T> // ERROR, struct not allowed here
结构和类之间有3个基本区别
第1 -内存是为堆栈内存中的结构保留的(这接近于编程语言),无论堆栈内存中的类是仅为引用保留的,实际内存是在堆内存中保留的。
默认情况下,结构对待公共类是否对待私有类。
第三,不能在结构中重用代码,但在类中我们可以多次重用相同的代码,称为继承
c++中struct和class关键字的区别在于,当在特定的复合数据类型上没有特定的说明符时,默认情况下struct或union是只考虑隐藏数据的公共关键字,而class是考虑隐藏程序代码或数据的私有关键字。总是有一些程序员为了数据而使用结构,为了代码而使用类。欲了解更多信息,请联系其他渠道。
这只是一种惯例。可以创建结构来保存简单的数据,但稍后会随着成员函数和构造函数的添加而发展。另一方面,在struct中看到public: access之外的东西是不寻常的。