Ad Code

constructors that take parameters

constructors that take parameters




কনস্ট্রাক্টর যারা প্যারামিটার নেয়,
কনস্ট্রাক্টর ফাংশনে আর্গুমেন্ট পাস করা সম্ভব। অনুমতি এটি, কেবল কনস্ট্রাক্টর ফাংশনের ঘোষণা এবং সংজ্ঞাতে উপযুক্ত পরামিতি যোগ করুন। তারপর, যখন আপনি একটি বস্তু ঘোষণা করেন, আর্গুমেন্টগুলি নির্দিষ্ট করুন। এটি কীভাবে সম্পন্ন হয় তা দেখতে, এখানে দেখানো সংক্ষিপ্ত উদাহরণ দিয়ে শুরু করুন:


#include <iostream> 
using namespace std;
class myclass (
int a; public:
myclass (int x); // constructor
void how();
myclass::myclass (int x)
cout << In constructor\n"; a = x;
void myclass::show()
cout << a << "\n";
}
int main()
myclass ob(4);
ob.show();
return 0;
}


এখানে মাইক্লাসের জন্য কনস্ট্রাক্টর একটি প্যারামিটার নেয়।
myclass() পাস করা হয় একটি আরম্ভ করার জন্য ব্যবহৃত হয়। main() এ কিভাবে ob ঘোষণা করা হয় সেদিকে বিশেষ মনোযোগ দিন। মান 4, ob অনুসরণের বন্ধনীতে নির্দিষ্ট করা হয়েছে, হল আর্গুমেন্ট যা myclass () এর প্যারামিটারে পাস করা হয়েছে
x, যে মানটি শুরু করতে ব্যবহৃত হয়।



আসলে, একটি প্যারামিটারাইজড একটি আর্গুমেন্ট পাস করার জন্য সিনট্যাক্স
কনস্ট্রাক্টর এই দীর্ঘ ফর্মের জন্য সংক্ষিপ্ত বিবরণ:


myclass ob myclass (4);

যাইহোক, বেশিরভাগ C++ প্রোগ্রামাররা শর্ট ফর্ম ব্যবহার করে। প্রকৃতপক্ষে, কপি কনস্ট্রাক্টরের সাথে সম্পর্কিত দুটি ফর্মের মধ্যে একটি সামান্য প্রযুক্তিগত পার্থক্য রয়েছে, যা এই বইতে পরে আলোচনা করা হয়েছে। কিন্তু আপনার এখন এই পার্থক্য নিয়ে চিন্তা করার দরকার নেই।
কনস্ট্রাক্টর ফাংশনগুলির বিপরীতে, ডেস্ট্রাক্টর ফাংশনে প্যারামিটার থাকতে পারে না।
এর কারণটি বোঝার জন্য যথেষ্ট সহজ: কোনও প্রক্রিয়া নেই
যার দ্বারা ধ্বংস করা হচ্ছে এমন একটি বস্তুর কাছে আর্গুমেন্ট পাস করা যায়।


উদাহরণ

1. এটা সম্ভব-আসলে, বেশ সাধারণ-একটি কনস্ট্রাক্টরকে একাধিক আর্গুমেন্ট পাস করা। এখানে myclass() দুটি পাস করা হয়েছে
যুক্তি:


#include <iostream> 
using namespace std;
class myclass {
int a, b;
public:
myclass (int x, int y); // constructor
void show();
myclass::myclass (int x, int y)
cout << "In constructor\n";
a = x; b = yi
void myclass::show()
cout << a b << "\n";
int main()
{
myclass ob(4, 7);
ob.show();
return 0;
}






এখানে 4 পাস করা হয়েছে x এবং 7 পাস করা হয়েছে y-তে। এই একই সাধারণ পদ্ধতি আপনার পছন্দের যেকোন সংখ্যক আর্গুমেন্ট পাস করতে ব্যবহার করা হয় (অবশ্যই কম্পাইলার দ্বারা নির্ধারিত সীমা পর্যন্ত)।
2. এখানে স্ট্যাক ক্লাসের আরেকটি সংস্করণ রয়েছে যা একটি স্ট্যাকে "নাম" পাস করতে একটি প্যারামিটারাইজড কনস্ট্রাক্টর ব্যবহার করে। এই একক-অক্ষরের নামটি স্ট্যাকটি সনাক্ত করতে ব্যবহৃত হয় যা একটি ত্রুটি ঘটলে উল্লেখ করা হচ্ছে।



#include <iostream> 
using namespace std;
#define SIZE 10

// Declare a stack class for characters.

class stack {
char stck[SIZE]; // holds the stack 
int tos; // index of top of stack 
char who; // identifies stack
public:
stack (char c); // constructor void push (char ch); // push character on stack
char pop(); // pop character from stack
 };

// Initialize the stack. 

stack:: stack (char c)
tos = 0; who = C;
// Push a character.
void stack::push(char ch)
cout << "Constructing stack << who << "\n";

if(tos==SIZE){
cout << "Stack << who << " is full\n";

return;
}
stck[tos] = ch;
tos++;
}

// Pop a character

char stack::pop()
cout << "Stack " << who << " is empty\n";
return 0; // return null on empty stack
}

tos--;
return stck[tos];
}

int main(){

// Create two stacks that are automatically initialized. 

stack sl('A'), s2 ('B'); 
int i;
s1.push('a');
s2.push('x');
s1.push('b');
s2.push('y');


// This will generate some error messages.
for (i=0; i<5; i++) cout << "Pop sl: " << s1.pop() << "\n"; 
for (i=0; i<5; i++) cout << "Pop s2: <<< s2.pop() << "\n";
return 0;
}

এই উদাহরণে দেখানো বস্তুর একটি "নাম" দেওয়া, বিশেষ করে
ডিবাগিংয়ের সময় দরকারী, যখন কোন বস্তুটি একটি ত্রুটি তৈরি করে তা জানা গুরুত্বপূর্ণ।


3. এখানে startypeআগে প্রয়োগ করার একটি ভিন্ন উপায় রয়েছে) যা একটি প্যারামিটারাইজড কনস্ট্রাক্টর ফাংশন ব্যবহার করে:

#include <iostream>
#include <cstring> 
#include <cstdlib>

using namespace std;

class strtype { 
char *p;
int len; 
public:
strtype (char *ptr);
~strtype();
void show();
};

strtype:: strtype (char *ptr) }
len = strlen(ptr);
p = (char *) malloc(len+1); 
if (!p) {
cout << "Allocation error\n";
exit(1);
}

strcpy(p, ptr);
strtype::-strtype()
cout << "Freeing p\n";
free (p);
}

void strtype::show()
cout << "\n";
cout << p << " - length: <<< len;
int main()
{
strtype sl("This is a test."), $2("I like C++.");
al.show();
s2.show();
return 0;
}

স্ট্রটাইপের এই সংস্করণে, কনস্ট্রাক্টর ফাংশন ব্যবহার করে একটি স্ট্রিংকে একটি প্রাথমিক মান দেওয়া হয়।


4. যদিও পূর্ববর্তী উদাহরণগুলি ধ্রুবক ব্যবহার করেছে, আপনি একটি অবজেক্টের কনস্ট্রাক্টরকে ভেরিয়েবল সহ যেকোনো বৈধ অভিব্যক্তি পাস করতে পারেন। উদাহরণস্বরূপ, এই প্রোগ্রামটি ব্যবহারকারীর ইনপুট ব্যবহার করে
একটি বস্তু নির্মাণ:

#include <iostream> 
using namespace std;
class myclass {
 int i, j;
public:
myclass (int a, int b); 
void show();
};

myclass::myclass (int a, int b)
{
i = a;
j = b;
}

void myclass::show()
{
cout << i << j << "\n";
}

int main()
{
int x, y;
cout << "Enter two integers: ";
cin >> x >> y;
// use variables to construct ob

myclass ob(x, y);

ob.show();
return 0;
}

এই প্রোগ্রামটি বস্তু সম্পর্কে একটি গুরুত্বপূর্ণ বিষয় তুলে ধরে। তাদের সৃষ্টির সময় সঠিক পরিস্থিতির সাথে মানানসই করার জন্য প্রয়োজন অনুসারে সেগুলি তৈরি করা যেতে পারে। আপনি যখন C++ সম্পর্কে আরও জানবেন, তখন আপনি দেখতে পাবেন যে "উড়তে থাকা" বস্তু নির্মাণ করা কতটা দরকারী।



অনুশীলন

1. স্ট্যাক ক্লাস পরিবর্তন করুন যাতে এটি গতিশীলভাবে স্ট্যাকের জন্য মেমরি বরাদ্দ করে। কনস্ট্রাক্টর ফাংশনে একটি প্যারামিটার দ্বারা নির্দিষ্ট করা স্ট্যাকের আকার আছে। (একটি ধ্বংসকারী ফাংশন দিয়ে এই মেমরিটি মুক্ত করতে ভুলবেন না।)
2. t_and_d নামে একটি ক্লাস তৈরি করুন যেটি তৈরি করার সময় এটির কনস্ট্রাক্টরের কাছে একটি প্যারামিটার হিসাবে বর্তমান সিস্টেমের সময় এবং তারিখ পাস করা হয়। ক্লাসে একটি সদস্য ফাংশন অন্তর্ভুক্ত করুন যা পর্দায় এই সময় এবং তারিখ প্রদর্শন করে। (ইঙ্গিত: সময় এবং তারিখ খুঁজে পেতে এবং প্রদর্শন করতে স্ট্যান্ডার্ড লাইব্রেরিতে পাওয়া স্ট্যান্ডার্ড সময় এবং তারিখ ফাংশন ব্যবহার করুন।)
3. বক্স নামক একটি ক্লাস তৈরি করুন যার কন্সট্রাক্টর ফাংশন তিনটি দ্বিগুণ মান পাস করেছে, যার প্রতিটি একটি বাক্সের এক পাশের দৈর্ঘ্যকে প্রতিনিধিত্ব করে। বক্স ক্লাসে বক্সের ভলিউম গণনা করুন এবং ফলাফলটি একটি ডবল ভেরিয়েবলে সংরক্ষণ করুন। vol() নামে একটি সদস্য ফাংশন অন্তর্ভুক্ত করুন যা প্রতিটি বক্স বস্তুর ভলিউম প্রদর্শন করে।

Post a Comment

0 Comments

Close Menu