رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
  • 2
قاسم رمضانی منش

تفاوت بین Struct و Class در سی‌پلاس‌پلاس

سوال

با سلام.

بنده خروجی کد اسمبلی تولید شده Struct و Class را بررسی کردم ظاهرا که خروجی یکسانی دارند ! آیا واقعا دیگر تفاوتی بین کلمه‌کلیدی struct و class در سی‌پلاس‌پلاس نیست ؟

struct.cpp

struct AnotherType{
	public :
		int StructType;
};
int main(){
	AnotherType Object;
	return 0;
}

class.cpp

class AnotherType{
	public :
		int ClassType;
};
int main(){
	AnotherType Object;
	return 0;
}

 

و خروجی های اسمبلی تولید شده :

struct.cpp

[ghasem@clibcore test]$ g++ -S struct.cpp -o Struct && cat Struct 
	.file	"struct.cpp"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)"
	.section	.note.GNU-stack,"",@progbits

class.cpp

[ghasem@clibcore test]$ g++ -S class.cpp -o Class && cat Class
	.file	"class.cpp"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)"
	.section	.note.GNU-stack,"",@progbits

 

و برای اطمینان خروجی حاصل از دستور diff Struct Class :

[ghasem@clibcore test]$ diff Struct Class
1c1
< 	.file	"struct.cpp"
---
> 	.file	"class.cpp"

 

  • تشکر شده 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 1

تفاوتی که بین struct و class وجود دارد بین دسترسی‌های پیشفرض آنها است؛ در class عضو‌ مربوطه به صورت پیشفرض دارای دسترسی خصوصی (private) بوده و در struct با دسترس عمومی (public) تعریف می‌شوند.

در مثال زیر عضو x مربوط به struct به صورت پیشفرض دارای دسترسی عمومی می‌باشد و عضو x مربوط به class دارای دسترسی خصوصی است.

struct Demo
{
    Demo() {}
    
    int x;
};

class Demo
{
    Demo() {}
    
    int x;
};

در مثال زیر هر دوی ساختار و کلاس مربوط به Demo دارای دسترسی‌های یکسان یعنی هر دو عمومی (public) هستند.

struct Demo
{
    Demo() {}
    
    int x;
};

class Demo
{
public:
    Demo() {}
    
    int x;
};

 

  • پسندیدن 1
  • تشکر شده 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 1

البته در تکمیل فرمایش جناب اسدزاده!

بله در واقع تفاوت Class و Struct در زبان ++C مربوط به همین دسترسی به خصیصه های پیش فرض تعریف شده است.

اما اغلب برنامه نویسانی که از زبان C به ++C مهاجرت کرده اند معمولا برای مدل کردن داده های خود از struct استفاده میکند چون ضمن خوانایی بیشتر از نظر مفهومی هم خیلی بهتر هست و البته شاید یک دلیل هم اینکه از struct استفاده میکنیم برای این هست که وقتی شما می خواهید داده های تودرتو با struct و union ایجاد کنید، مطمنا تعریف struct بسیار ملموس تر و قابل فهم تر از استفاده از تعریف class می باشد مثل کد زیر...



static struct ITEM_STRUCT{
	char*strName;					
	int	nCmdLen;						
	int	nIndLen;						
	union stUnion {
	   int ix;
	   int iy;
	   struct iS {
	       char * isC;
		   int isZ;
	   }
	} stU1,stU2 ; 
	int getIndLen(int ItemType)
	{
		if (ItemType != INT_ACK) 
			return nIndLen;
		else
		{
			if(gbGenerateAx)
				return nIndLen+1;
			else
				return nIndLen;
		}
	}
}

 

  • پسندیدن 1
  • تشکر شده 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×