আমি যে সংস্থাটিতে কাজ করি সেগুলি তাদের ডেটা স্ট্রাকচারের সমস্তটির সূচনা এভাবে শুরু করে:
//the structure
typedef struct{
int a,b,c;
} Foo;
//the initialize function
InitializeFoo(Foo* const foo){
foo->a = x; //derived here based on other data
foo->b = y; //derived here based on other data
foo->c = z; //derived here based on other data
}
//initializing the structure
Foo foo;
InitializeFoo(&foo);
আমি আমার স্ট্রাকগুলি এভাবে শুরু করার চেষ্টা করে কিছুটা ধাক্কা ফিরে পেয়েছি:
//the structure
typedef struct{
int a,b,c;
} Foo;
//the initialize function
Foo ConstructFoo(int a, int b, int c){
Foo foo;
foo.a = a; //part of parameter input (inputs derived outside of function)
foo.b = b; //part of parameter input (inputs derived outside of function)
foo.c = c; //part of parameter input (inputs derived outside of function)
return foo;
}
//initialize (or construct) the structure
Foo foo = ConstructFoo(x,y,z);
একে অপরের থেকে কি একটা সুবিধা আছে?
আমার কোনটি করা উচিত এবং আমি কীভাবে এটি আরও ভাল অনুশীলন হিসাবে ন্যায়সঙ্গত করব?
InitializeFoo()
একটি নির্মাতা । সি ++ কনস্ট্রাক্টরের পার্থক্য কেবল হ'ল, this
পয়েন্টারটি স্পষ্টভাবে না দিয়ে স্পষ্টতই পাস করা হয়েছে। সংকলিত কোড InitializeFoo()
এবং একটি সম্পর্কিত সি ++ Foo::Foo()
হুবহু একই।