java的class和c的struct_C ++中的struct和class有什么区别?

现在,我想学习C ++中的结构和类之间的区别。 请讨论技术差异以及在OO设计中选择一个或另一个的原因。

我将从一个明显的区别开始:

如果您未指定public:或private: :,则结构的成员默认为public; 默认情况下,类的成员是私有的。

我确信在C ++规范的晦涩之处可以找到其他差异。

#1楼

默认情况下,结构的成员是公共的,而默认情况下,类的成员是私有的。

从另一个结构或类的结构的默认继承是公共的。从另一个结构或类的结构的默认继承是私有的。

class A{

public:

int i;

};

class A2:A{

};

struct A3:A{

};

struct abc{

int i;

};

struct abc2:abc{

};

class abc3:abc{

};

int _tmain(int argc, _TCHAR* argv[])

{

abc2 objabc;

objabc.i = 10;

A3 ob;

ob.i = 10;

//A2 obja; //privately inherited

//obja.i = 10;

//abc3 obss;

//obss.i = 10;

}

这是在VS2005上。

#2楼

。 在类中,默认情况下所有成员都是私有的,而在结构中默认情况下所有成员都是公共的。

对于结构,没有像构造函数和析构函数这样的术语,但是对于类编译器,如果不提供,则会创建默认值。

空类的Sizeof结构为0字节,而空类的Sizeof为1字节结构的默认访问类型为public。 通常应将结构用于分组数据。

类的默认访问类型为private,继承的默认模式为private。 应该使用一个类对数据和对该数据进行操作的方法进行分组。

简而言之,约定是在将数据分组时使用struct,而在我们需要数据抽象甚至继承的情况下使用类。

在C ++中,除非明确取消引用,否则结构和类将按值传递。 在其他语言中,类和结构可能具有不同的语义-即。 对象(类的实例)可以通过引用传递,而结构可以通过值传递。 注意:有与此问题相关的评论。 请参阅讨论页添加到对话。

#3楼

C ++中struct和class关键字之间的区别在于,当在特定的复合数据类型上没有特定的说明符时,默认情况下struct或union是仅考虑数据隐藏的public关键字,而class是考虑程序隐藏的private关键字。代码或数据。 总是有些程序员为了代码而使用struct来存储数据和使用类 。 有关更多信息,请联系其他来源。

#4楼

从所有这些因素中,可以得出结论,概念类非常适合表示现实世界的对象,而不是“结构”。很大程度上,因为类中使用的OOP概念在解释现实世界场景时非常实用,因此更容易将它们合并为现实。例如,默认继承是结构的公共属性,但是如果将此规则应用于现实世界,这是很荒谬的。但是在类中,默认继承是private,这是更现实的做法。

无论如何,我需要证明的是,类是一个更广泛的,在现实世界中适用的概念,而结构是一个内部组织较差的原始概念(Eventhough结构遵循OOP概念,它们的含义很差)。

#5楼

类是引用类型,结构是值类型。

当我说类是引用类型时,

基本上,它们将包含实例变量的地址。

例如:

Class MyClass

{

Public Int DataMember; //By default, accessibility of class data members

//will be private. So I am making it as Public which

//can be accessed outside of the class.

}

在主要方法中

我可以使用为该类分配内存的新运算符创建该类的实例

并将其基地址存储到MyClass类型变量(_myClassObject2)中。

Static Public void Main (string[] arg)

{

MyClass _myClassObject1 = new MyClass();

_myClassObject1.DataMember = 10;

MyClass _myClassObject2 = _myClassObject1;

_myClassObject2.DataMember=20;

}

在上面的程序中,MyClass _myClassObject2 = _myClassObject1; 指令指示两个MyClass类型的变量

myClassObject1

myClassObject2

并将指向相同的内存位置。

它基本上将相同的内存位置分配给另一个相同类型的变量。

因此,如果我们对MyClass类型的任何一个对象进行的任何更改都会对另一个对象产生影响

因为两者都指向相同的存储位置。

“ _myClassObject1.DataMember = 10;” 在此行,对象的两个数据成员都将包含值10。

“ _myClassObject2.DataMember = 20;” 在此行,对象的数据成员都将包含值20。

最终, 我们通过指针访问对象的数据成员。

与类不同,结构是值类型。 例如:

Structure MyStructure

{

Public Int DataMember; //By default, accessibility of Structure data

//members will be private. So I am making it as

//Public which can be accessed out side of the structure.

}

Static Public void Main (string[] arg)

{

MyStructure _myStructObject1 = new MyStructure();

_myStructObject1.DataMember = 10;

MyStructure _myStructObject2 = _myStructObject1;

_myStructObject2.DataMember = 20;

}

在上面的程序中

使用new运算符实例化MyStructure类型的对象

将地址存储到MyStructure类型的_myStructObject变量中,并

使用“ _myStructObject1.DataMember = 10”将值10分配给结构的数据成员。

在下一行中

我声明了另一个MyStructure类型的变量_myStructObject2,并将_myStructObject1分配给它。

.NET C#编译器在这里创建_myStructureObject1对象的另一个副本,并

将该内存位置分配给MyStructure变量_myStructObject2。

因此,无论我们对_myStructObject1进行的更改如何,都永远不会对MyStructrue类型的另一个变量_myStructObject2产生影响。

这就是为什么我们说结构是值类型。

因此,该类的直接基类是Object,而Structure的直接基类是ValueType,它从Object继承。

类将支持继承,而结构则不支持。

我们怎么说呢?

那是什么原因呢?

答案是班级。

它可以是抽象的,密封的,静态的和部分的,并且不能是私有的,受保护的和受保护的内部。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值