প্রশ্নটি পরিষ্কার করার জন্য, আমি বরং 'স্ট্যাটিক' কীওয়ার্ডের ব্যবহারটি তিনটি পৃথক আকারে শ্রেণিবদ্ধ করব:
(ক)। ভেরিয়েবল
(বি)। ক্রিয়াকলাপ
(গ)। সদস্যের ভেরিয়েবল / ক্লাসের কার্যাদি
ব্যাখ্যা সাব-শিরোনামগুলির প্রতিটিের জন্য নীচে অনুসরণ করে:
(ক) ভেরিয়েবলের জন্য 'স্ট্যাটিক' কীওয়ার্ড
তবে এটি সঠিকভাবে ব্যাখ্যা করা এবং বোঝা গেলে এটি সামান্য কৌশলযুক্ত হতে পারে pretty
এটি ব্যাখ্যা করার জন্য, প্রথমে ভেরিয়েবলের সুযোগ, সময়কাল এবং লিঙ্কেজ সম্পর্কে জেনে রাখা সত্যিই দরকারী , যা না করে স্থায়ী কীওয়ার্ডের নীরব ধারণার মাধ্যমে জিনিসগুলি দেখতে সবসময় কঠিন
1. সুযোগ : ফাইলটিতে কোথায়, ভেরিয়েবল অ্যাক্সেসযোগ্য তা নির্ধারণ করে। এটি দুটি ধরণের হতে পারে: (i) স্থানীয় বা ব্লক স্কোপ । (ii) গ্লোবাল স্কোপ
২. সময়কাল : কোনও ভেরিয়েবল তৈরি ও ধ্বংস হওয়ার পরে তা নির্ধারণ করে। আবার এটি দুটি ধরণের: (i) স্বয়ংক্রিয় স্টোরেজ সময়কাল (স্থানীয় বা ব্লক স্কোপযুক্ত ভেরিয়েবলগুলির জন্য)। (ii) স্ট্যাটিক স্টোরেজ সময়কাল ( স্থির স্পেসিফায়ার সহ গ্লোবাল স্কোপ বা স্থানীয় ভেরিয়েবল (কোনও ফাংশন বা একটি কোড ব্লকের একটি ভেরিয়েবলগুলির জন্য ) for
৩. লিঙ্কেজ : নির্ধারণ করে যে কোনও ফাইলের কোনও ভেরিয়েবল অ্যাক্সেস করা যায় (বা লিঙ্ক করা)) আবার (এবং ভাগ্যক্রমে) এটি দুটি ধরণের: (i) অভ্যন্তরীণ লিঙ্কেজ
(ব্লক স্কোপ এবং গ্লোবাল স্কোপ / ফাইল স্কোপ / গ্লোবাল নেমস্পেস স্কোপযুক্ত ভেরিয়েবলগুলির জন্য ) (ii) বহিরাগত লিঙ্কেজ (কেবল গ্লোবাল স্কোপ / ফাইল স্কোপ / এর জন্য থাকা ভেরিয়েবলগুলির জন্য ) গ্লোবাল নেমস্পেস স্কোপ)
সরল গ্লোবাল এবং স্থানীয় ভেরিয়েবলগুলি (স্ট্যাটিক স্টোরেজ সময়কাল সহ কোনও স্থানীয় ভেরিয়েবল নেই) সম্পর্কে আরও ভাল করে বোঝার জন্য নীচে একটি উদাহরণ উল্লেখ করুন:
//main file
#include <iostream>
int global_var1; //has global scope
const global_var2(1.618); //has global scope
int main()
{
//these variables are local to the block main.
//they have automatic duration, i.e, they are created when the main() is
// executed and destroyed, when main goes out of scope
int local_var1(23);
const double local_var2(3.14);
{
/* this is yet another block, all variables declared within this block are
have local scope limited within this block. */
// all variables declared within this block too have automatic duration, i.e,
/*they are created at the point of definition within this block,
and destroyed as soon as this block ends */
char block_char1;
int local_var1(32) //NOTE: this has been re-declared within the block,
//it shadows the local_var1 declared outside
std::cout << local_var1 <<"\n"; //prints 32
}//end of block
//local_var1 declared inside goes out of scope
std::cout << local_var1 << "\n"; //prints 23
global_var1 = 29; //global_var1 has been declared outside main (global scope)
std::cout << global_var1 << "\n"; //prints 29
std::cout << global_var2 << "\n"; //prints 1.618
return 0;
} //local_var1, local_var2 go out of scope as main ends
//global_var1, global_var2 go out of scope as the program terminates
//(in this case program ends with end of main, so both local and global
//variable go out of scope together
লিংকেজের ধারণাটি এখন আসে। যখন একটি ফাইলে সংজ্ঞায়িত গ্লোবাল ভেরিয়েবলটি অন্য ফাইলে ব্যবহারের উদ্দেশ্যে হয়, তখন ভেরিয়েবলের লিঙ্কেজ একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
গ্লোবাল ভেরিয়েবলের লিংকেজ কীওয়ার্ডগুলি দ্বারা নির্দিষ্ট করা হয়: (i) স্থির এবং, (ii) বাহ্যিক
(এখন আপনি ব্যাখ্যা পেতে)
স্থানীয় এবং বৈশ্বিক স্কোপ সহ স্থির কীওয়ার্ড ভেরিয়েবলগুলিতে প্রয়োগ করা যেতে পারে এবং উভয় ক্ষেত্রেই তাদের অর্থ ভিন্ন ভিন্ন। আমি প্রথমে গ্লোবাল স্কোপ সহ ভেরিয়েবলগুলিতে 'স্ট্যাটিক' কীওয়ার্ডের ব্যবহারটি ব্যাখ্যা করব (যেখানে আমি 'বাহ্যিক' কীওয়ার্ডের ব্যবহারটিও স্পষ্ট করি) এবং পরে স্থানীয় ক্ষেত্রযুক্ত লোকদের জন্য।
1. বিশ্বব্যাপী সুযোগ সহ ভেরিয়েবলের জন্য স্ট্যাটিক কীওয়ার্ড
গ্লোবাল ভেরিয়েবলের স্থির সময়কাল থাকে, অর্থাত্ যখন কোডটির কোনও নির্দিষ্ট ব্লক (উদাহরণস্বরূপ মূল ()) এটি ব্যবহৃত হয় তখন এগুলি সুযোগের বাইরে যায় না। লিঙ্কেজের উপর নির্ভর করে, কেবলমাত্র সেগুলি কেবল একই ফাইলের মধ্যে অ্যাক্সেস করা যেতে পারে যেখানে তারা ঘোষিত হয় (স্ট্যাটিক গ্লোবাল ভেরিয়েবলের জন্য), অথবা যে ফাইলের মধ্যে তারা ঘোষিত হয় তার বাইরে (বাহ্যিক ধরণের গ্লোবাল ভেরিয়েবল)
এক্সটার্নাল স্পেসিফারযুক্ত বৈশ্বিক চলকের ক্ষেত্রে, এবং যদি এই ভেরিয়েবলটি যে ফাইলটি এটি শুরু করা হয়েছিল তার বাইরে অ্যাক্সেস করা হচ্ছে, যেখানে এটি ব্যবহৃত হচ্ছে সেই ফাইলে এটি ঘোষণা করতে হবে, ঠিক যেমন কোনও ফাংশন এগিয়ে রাখতে হবে এটির সংজ্ঞাটি যেখানে ব্যবহৃত হচ্ছে সেখান থেকে আলাদা কোনও ফাইলে থাকলে তা ঘোষণা করে।
বিপরীতে, গ্লোবাল ভেরিয়েবলের যদি স্থির কীওয়ার্ড থাকে, তবে এটির বাইরে এটি ঘোষিত কোনও ফাইলে ব্যবহার করা যাবে না।
(স্পষ্টকরণের জন্য নীচে উদাহরণ দেখুন)
উদাহরণ:
//main2.cpp
static int global_var3 = 23; /*static global variable, cannot be
accessed in anyother file */
extern double global_var4 = 71; /*can be accessed outside this file linked to main2.cpp */
int main() { return 0; }
main3.cpp
//main3.cpp
#include <iostream>
int main()
{
extern int gloabl_var4; /*this variable refers to the gloabal_var4
defined in the main2.cpp file */
std::cout << global_var4 << "\n"; //prints 71;
return 0;
}
এখন সি ++ তে যে কোনও চলক হয় কনস্ট বা একটি কনস্ট-কনস্ট্যান্ট হতে পারে এবং প্রতিটি 'কনস্ট-নেস' এর জন্য আমরা ডিফল্ট সি ++ লিঙ্কেজের দুটি ক্ষেত্রে পাই, যদি কোনওটি নির্দিষ্ট না হয়:
(i) গ্লোবাল ভেরিয়েবল যদি নন-কনস্টেট হয় তবে এর লিঙ্কেজটি ডিফল্টরূপে বাহ্যিক অর্থাত্, নন-কনস্ট্যান্ট গ্লোবাল ভেরিয়েবলটি বহিরাগত কীওয়ার্ড ব্যবহার করে ফরওয়ার্ড ডিক্লেয়ারেশন করে অন্য .cpp ফাইলে অ্যাক্সেস করা যায় (অন্য কথায় নন কনস্ট গ্লোবাল ভেরিয়েবলের বহিরাগত যোগসূত্র রয়েছে (অবশ্যই স্থির সময়কাল সহ)। মূল ফাইলটিতে এটি বাহ্যিক কীওয়ার্ডের ব্যবহার যেখানে এটি সংজ্ঞায়িত করা হয়েছে তা হ্রাসকারী is এই ক্ষেত্রে বাহ্যিক ফাইলের অবিচ্ছিন্ন গ্লোবাল ভেরিয়েবলকে অ্যাক্সেসযোগ্য করার জন্য, ভেরিয়েবলের ধরণের আগে স্পেসিফার 'স্ট্যাটিক' ব্যবহার করুন ।
(ii) গ্লোবাল ভেরিয়েবল যদি কনস্ট হয় তবে এর সংযোগটি ডিফল্টরূপে স্থিতিশীল , অর্থাৎ কনস্ট কনটেস্ট গ্লোবাল ভেরিয়েবলের সংজ্ঞা দেওয়া ব্যতীত অন্য কোনও ফাইলে অ্যাক্সেস করা যায় না, (অন্য কথায় কনস্ট গ্লোবাল ভেরিয়েবলের অভ্যন্তরীণ যোগসূত্র রয়েছে (স্থির সময়সীমার সাথে অবশ্যই)). এছাড়াও কোনও স্থিতিশীল বৈশ্বিক ভেরিয়েবলকে অন্য কোনও ফাইলে অ্যাক্সেস করা থেকে বিরত রাখতে স্ট্যাটিক কীওয়ার্ডের ব্যবহার অপ্রয়োজনীয়। এখানে, কনস্টের বৈশ্বিক ভেরিয়েবলের একটি বাহ্যিক সংযোগ স্থাপন করতে, ভেরিয়েবলের ধরণের আগে 'বাহ্যিক' নির্দিষ্টকরণ ব্যবহার করুন
বিভিন্ন লিঙ্কেজ সহ বিশ্বব্যাপী স্কোপ ভেরিয়েবলের সংক্ষিপ্তসার এখানে
//globalVariables1.cpp
// defining uninitialized vairbles
int globalVar1; // uninitialized global variable with external linkage
static int globalVar2; // uninitialized global variable with internal linkage
const int globalVar3; // error, since const variables must be initialized upon declaration
const int globalVar4 = 23; //correct, but with static linkage (cannot be accessed outside the file where it has been declared*/
extern const double globalVar5 = 1.57; //this const variable ca be accessed outside the file where it has been declared
পরবর্তী আমরা অনুসন্ধান করি যে উপরের গ্লোবাল ভেরিয়েবলগুলি যখন অন্য কোনও ফাইলে অ্যাক্সেস করা হয় তখন কীভাবে আচরণ করে।
//using_globalVariables1.cpp (eg for the usage of global variables above)
// Forward declaration via extern keyword:
extern int globalVar1; // correct since globalVar1 is not a const or static
extern int globalVar2; //incorrect since globalVar2 has internal linkage
extern const int globalVar4; /* incorrect since globalVar4 has no extern
specifier, limited to internal linkage by
default (static specifier for const variables) */
extern const double globalVar5; /*correct since in the previous file, it
has extern specifier, no need to initialize the
const variable here, since it has already been
legitimately defined perviously */
2. স্থানীয় স্কোপ সহ ভেরিয়েবলের জন্য স্ট্যাটিক কীওয়ার্ড
স্থানীয় স্কোপে ভেরিয়েবলের জন্য স্ট্যাটিক কীওয়ার্ডের উপর আপডেটগুলি (আগস্ট 2019)
এটি আরও দুটি বিভাগে বিভক্ত করা যেতে পারে:
(i) একটি ফাংশন ব্লকের মধ্যে ভেরিয়েবলের জন্য স্ট্যাটিক কীওয়ার্ড এবং (ii) নামবিহীন স্থানীয় ব্লকের মধ্যে ভেরিয়েবলের জন্য স্ট্যাটিক কীওয়ার্ড।
(i) একটি ফাংশন ব্লকের মধ্যে চলকগুলির জন্য স্থিতিশীল কীওয়ার্ড।
এর আগে, আমি উল্লেখ করেছি যে স্থানীয় স্কোপ সহ ভেরিয়েবলগুলির স্বয়ংক্রিয় সময়কাল থাকে, অর্থাৎ ব্লকটি প্রবেশ করার পরে এগুলি উপস্থিত হয় (এটি একটি সাধারণ ব্লক, এটি কোনও ফাংশন ব্লক হোক) এবং ব্লকটি শেষ হয়ে গেলে অস্তিত্ব বন্ধ করে দেয়, দীর্ঘ গল্পের ছোট, ভেরিয়েবলগুলি স্থানীয় স্কোপ সহ স্বয়ংক্রিয় সময়কাল এবং স্বয়ংক্রিয় সময়কাল ভেরিয়েবল (এবং অবজেক্টস) এর কোনও যোগসূত্র নেই অর্থাত তারা কোড ব্লকের বাইরে দৃশ্যমান নয়।
যদি স্থির স্পেসিফায়ার কোনও ফাংশন ব্লকের মধ্যে স্থানীয় ভেরিয়েবলে প্রয়োগ করা হয়, তবে এটি ভেরিয়েবলের সময়কাল স্বয়ংক্রিয় থেকে স্থিতিতে পরিবর্তিত হয় এবং এর জীবনকাল প্রোগ্রামের পুরো সময়কাল যার অর্থ এটির একটি স্থির মেমরি অবস্থান থাকে এবং এর মান কেবল আরম্ভ হয় সিপিপি রেফারেন্সে বর্ণিত প্রোগ্রাম শুরু হওয়ার আগে একবার ( সূচনাটি অ্যাসাইনমেন্টের সাথে বিভ্রান্ত করা উচিত নয়)
একটি উদাহরণ দেখুন।
//localVarDemo1.cpp
int localNextID()
{
int tempID = 1; //tempID created here
return tempID++; //copy of tempID returned and tempID incremented to 2
} //tempID destroyed here, hence value of tempID lost
int newNextID()
{
static int newID = 0;//newID has static duration, with internal linkage
return newID++; //copy of newID returned and newID incremented by 1
} //newID doesn't get destroyed here :-)
int main()
{
int employeeID1 = localNextID(); //employeeID1 = 1
int employeeID2 = localNextID(); // employeeID2 = 1 again (not desired)
int employeeID3 = newNextID(); //employeeID3 = 0;
int employeeID4 = newNextID(); //employeeID4 = 1;
int employeeID5 = newNextID(); //employeeID5 = 2;
return 0;
}
স্থিতিশীল স্থানীয় ভেরিয়েবল এবং স্থির বৈশ্বিক ভেরিয়েবলের জন্য উপরের মানদণ্ডটি দেখে কেউ জিজ্ঞাসা করতে প্ররোচিত হতে পারে যে তাদের মধ্যে পার্থক্য কী হতে পারে। যদিও গ্লোবাল ভেরিয়েবল কোডের ভিতর যে কোন সময়ে প্রবেশযোগ্য (একই সেইসাথে বিভিন্ন অনুবাদ ইউনিট উপর নির্ভর করে এ const -ness এবং extern -ness), একটি স্ট্যাটিক পরিবর্তনশীল একটি ফাংশন ব্লকের মধ্যে সংজ্ঞায়িত সরাসরি অ্যাক্সেসযোগ্য নয়। ভেরিয়েবলটি ফাংশনের মান বা রেফারেন্স দিয়ে ফিরে আসতে হবে। একটি উদাহরণ দিয়ে এটি প্রদর্শিত যাক:
//localVarDemo2.cpp
//static storage duration with global scope
//note this variable can be accessed from outside the file
//in a different compilation unit by using `extern` specifier
//which might not be desirable for certain use case.
static int globalId = 0;
int newNextID()
{
static int newID = 0;//newID has static duration, with internal linkage
return newID++; //copy of newID returned and newID incremented by 1
} //newID doesn't get destroyed here
int main()
{
//since globalId is accessible we use it directly
const int globalEmployee1Id = globalId++; //globalEmployeeId1 = 0;
const int globalEmployee2Id = globalId++; //globalEmployeeId1 = 1;
//const int employeeID1 = newID++; //this will lead to compilation error since newID++ is not accessible direcly.
int employeeID2 = newNextID(); //employeeID3 = 0;
int employeeID2 = newNextID(); //employeeID3 = 1;
return 0;
}
স্থির গ্লোবাল এবং স্ট্যাটিক স্থানীয় ভেরিয়েবলের পছন্দ সম্পর্কে আরও ব্যাখ্যা এই স্ট্যাকওভারফ্লো থ্রেডে পাওয়া যেতে পারে
(ii) নামবিহীন স্থানীয় ব্লকের মধ্যে ভেরিয়েবলের স্থিতিশীল কীওয়ার্ড।
লোকাল ব্লকের মধ্যে স্ট্যাটিক ভেরিয়েবল (কোনও ফাংশন ব্লক নয়) একবার ব্লকের বাইরে স্থানীয় ব্লকের সুযোগ ছাড়াই যায় না। এই নিয়মের কোনও সতর্কতা নেই।
//localVarDemo3.cpp
int main()
{
{
const static int static_local_scoped_variable {99};
}//static_local_scoped_variable goes out of scope
//the line below causes compilation error
//do_something is an arbitrary function
do_something(static_local_scoped_variable);
return 0;
}
সি ++ 11 এমন কীওয়ার্ডটি চালু করেছিল constexpr
যা সংকলন সময়ে একটি অভিব্যক্তির মূল্যায়নের গ্যারান্টি দেয় এবং সংকলককে কোডটি অনুকূলিতকরণের অনুমতি দেয়। এখন যদি কোনও সুযোগের মধ্যে একটি স্ট্যাটিক কনস্ট ভেরিয়েবলের মানটি সংকলন সময়ে জানা যায়, কোডটি তার সাথে অনুরূপ পদ্ধতিতে অনুকূলিত হয় constexpr
। এখানে একটি ছোট উদাহরণ
আমি পাঠকদেরও এই স্ট্যাকওভারফ্লো থ্রেডের মধ্যে constexpr
এবং static const
ভেরিয়েবলের মধ্যে পার্থক্য সন্ধান করার পরামর্শ দিই । এটি ভেরিয়েবলগুলিতে প্রয়োগ করা স্ট্যাটিক কীওয়ার্ডের জন্য আমার ব্যাখ্যা শেষ করে।
বি। 'স্ট্যাটিক' ফাংশনের জন্য ব্যবহৃত কীওয়ার্ড
ফাংশনের ক্ষেত্রে, স্ট্যাটিক কীওয়ার্ডটির সরল অর্থ রয়েছে has এখানে এটি ফাংশনটির লিংকেজ বোঝায়
সাধারণত সিপিপি ফাইলের মধ্যে ঘোষিত সমস্ত ফাংশনের ডিফল্টরূপে বাহ্যিক সংযোগ থাকে, অর্থাত্ একটি ফাইলে সংজ্ঞায়িত ফাংশনটি ফরোয়ার্ড ঘোষণার মাধ্যমে অন্য সিপিপি ফাইলে ব্যবহার করা যেতে পারে।
ফাংশন ঘোষণার আগে একটি স্ট্যাটিক কীওয়ার্ড ব্যবহার করে এর সংযোগটি অভ্যন্তরের সাথে সীমাবদ্ধ করে , অর্থাত্ একটি সংবিধানের বাইরে কোনও ফাইলের মধ্যে একটি স্ট্যাটিক ফাংশন ব্যবহার করা যায় না।
সি স্টাইট কীওয়ার্ড ক্লাসের সদস্য ভেরিয়েবল এবং ফাংশনের জন্য ব্যবহৃত হয়
ক্লাসের সদস্য ভেরিয়েবলের জন্য 'স্ট্যাটিক' কীওয়ার্ড
আমি এখানে একটি উদাহরণ দিয়ে সরাসরি শুরু
#include <iostream>
class DesignNumber
{
private:
static int m_designNum; //design number
int m_iteration; // number of iterations performed for the design
public:
DesignNumber() { } //default constructor
int getItrNum() //get the iteration number of design
{
m_iteration = m_designNum++;
return m_iteration;
}
static int m_anyNumber; //public static variable
};
int DesignNumber::m_designNum = 0; // starting with design id = 0
// note : no need of static keyword here
//causes compiler error if static keyword used
int DesignNumber::m_anyNumber = 99; /* initialization of inclass public
static member */
enter code here
int main()
{
DesignNumber firstDesign, secondDesign, thirdDesign;
std::cout << firstDesign.getItrNum() << "\n"; //prints 0
std::cout << secondDesign.getItrNum() << "\n"; //prints 1
std::cout << thirdDesign.getItrNum() << "\n"; //prints 2
std::cout << DesignNumber::m_anyNumber++ << "\n"; /* no object
associated with m_anyNumber */
std::cout << DesignNumber::m_anyNumber++ << "\n"; //prints 100
std::cout << DesignNumber::m_anyNumber++ << "\n"; //prints 101
return 0;
}
এই উদাহরণে, স্ট্যাটিক ভেরিয়েবল m_designNum এর মান ধরে রাখে এবং এই একক ব্যক্তিগত সদস্যের ভেরিয়েবল (কারণ এটি স্ট্যাটিক) বি / ডাব্লু অবজেক্ট টাইপের ডিজাইনের নাম্বারের সমস্ত ভেরিয়েবল ভাগ করা হয়
অন্যান্য সদস্য ভেরিয়েবলগুলির মতো, কোনও শ্রেণীর স্থির সদস্য ভেরিয়েবলগুলি কোনও শ্রেণীর অবজেক্টের সাথে সম্পর্কিত নয়, যা মূল ফাংশনে যে কোনও নাম্বার মুদ্রণ দ্বারা প্রদর্শিত হয়
কনস্ট বনাম ক্লাসে নন-কনস্টের স্ট্যাটিক সদস্য ভেরিয়েবল
(i) নন-কনস্ট্যান্ট ক্লাসের স্ট্যাটিক সদস্য ভেরিয়েবলগুলি
পূর্ববর্তী উদাহরণে স্থির সদস্য (সরকারী এবং বেসরকারী উভয়ই) অ-স্থির ছিল। আইএসও স্ট্যান্ডার্ড নন-কনস্ট্যান্ট স্ট্যাটিক সদস্যদের ক্লাসে আরম্ভ করতে নিষেধ করে। অতএব পূর্ববর্তী উদাহরণের মতো এগুলি অবশ্যই শ্রেণীর সংজ্ঞায়নের পরে অবশ্যই স্থির কীওয়ার্ডটি বাদ দিতে হবে এমন সতর্কতার সাথে অবশ্যই শ্রেণিবদ্ধ হতে হবে
(২) ক্লাসের const স্ট্যাটিক সদস্য ভেরিয়েবল
এই সহজবোধ্য এবং অন্যান্য const সদস্য পরিবর্তনশীল আরম্ভের এর কনভেনশন সঙ্গে যায়, একটি ক্লাসের অর্থাত const স্ট্যাটিক সদস্য ভেরিয়েবল যাবে ঘোষণার সময়ে সক্রিয়া এবং তারা শেষে সক্রিয়া করা যেতে পারে শ্রেণীর সংজ্ঞার পরে ক্লাসের ঘোষণার যে শ্রেণিবদ্ধকরণের পরে আরম্ভ করার সময় মূল শব্দটি কনট স্ট্যাটিক সদস্যের সাথে যুক্ত করা দরকার with
আমি তবে, ঘোষণার স্থানে কনস্টিক স্ট্যাটিক সদস্য ভেরিয়েবলগুলি সূচনা করার জন্য সুপারিশ করব। এটি স্ট্যান্ডার্ড সি ++ কনভেনশন নিয়ে যায় এবং কোডটি আরও পরিষ্কার দেখায়
ক্লাসে স্ট্যাটিক সদস্য ভেরিয়েবলের আরও উদাহরণের জন্য শিখুন নীচের লিঙ্কটি শিখুন
http://www.learncpp.com/cpp-tutorial/811-static-member-variables/
২. ক্লাসের সদস্য ফাংশনের জন্য 'স্ট্যাটিক' কীওয়ার্ড
ক্লাসের সদস্য ভেরিয়েবলগুলি যেমন স্থির হতে পারে, তেমনি ক্লাসগুলির সদস্য ফাংশনও হতে পারে। ক্লাসগুলির সাধারণ সদস্য ফাংশন সর্বদা শ্রেণীর ধরণের কোনও বিষয়ের সাথে যুক্ত থাকে। বিপরীতে, কোনও শ্রেণীর স্থির সদস্যের কার্যগুলি শ্রেণীর কোনও বস্তুর সাথে সম্পর্কিত নয়, অর্থাত্ তাদের এই পয়েন্টার নেই * *
দ্বিতীয়ত যেহেতু শ্রেণীর স্থির সদস্য ফাংশনগুলির এই পয়েন্টার নেই *, সুতরাং প্রধান ফাংশনে ক্লাসের নাম এবং স্কোপ রেজোলিউশন অপারেটর ব্যবহার করে তাদের বলা যেতে পারে (ClassName :: ফাংশননেম ();)
তৃতীয়ত কোনও শ্রেণীর স্থির সদস্যের ক্রিয়াকলাপ কেবল শ্রেণীর স্থির সদস্য ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে, যেহেতু একটি শ্রেণীর অ স্থিতিশীল সদস্য ভেরিয়েবলগুলি কোনও শ্রেণীর অবজেক্টের অন্তর্ভুক্ত থাকতে হবে।
ক্লাসে স্ট্যাটিক সদস্য ফাংশন সম্পর্কিত আরও উদাহরণের জন্য learnncpp.com থেকে নিম্নলিখিত লিঙ্কটি সন্ধান করুন
http://www.learncpp.com/cpp-tutorial/812-static-member-functions/