staticহেডার ফাইলটিতে না করে ক্লাস সদস্য ফাংশনগুলি * .cpp ফাইলে প্রয়োগ করা সম্ভব ?
সব staticকাজ সবসময় হয় inline?
staticকীওয়ার্ডটি পুনরাবৃত্তি করবেন না । লিখুন staticশব্দ শুধুমাত্র হেডার ফাইলে বর্গ সংজ্ঞা
staticহেডার ফাইলটিতে না করে ক্লাস সদস্য ফাংশনগুলি * .cpp ফাইলে প্রয়োগ করা সম্ভব ?
সব staticকাজ সবসময় হয় inline?
staticকীওয়ার্ডটি পুনরাবৃত্তি করবেন না । লিখুন staticশব্দ শুধুমাত্র হেডার ফাইলে বর্গ সংজ্ঞা
উত্তর:
এইটা.
test.hpp:
class A {
public:
static int a(int i);
};
test.cpp:
#include <iostream>
#include "test.hpp"
int A::a(int i) {
return i + 2;
}
using namespace std;
int main() {
cout << A::a(4) << endl;
}
এগুলি সর্বদা ইনলাইন হয় না, না, তবে সংকলক সেগুলি তৈরি করতে পারে।
helper.hxx
class helper
{
public:
static void fn1 ()
{ /* defined in header itself */ }
/* fn2 defined in src file helper.cxx */
static void fn2();
};
helper.cxx
#include "helper.hxx"
void helper::fn2()
{
/* fn2 defined in helper.cxx */
/* do something */
}
A.cxx
#include "helper.hxx"
A::foo() {
helper::fn1();
helper::fn2();
}
সি ++ স্ট্যাটিক ফাংশনগুলি কীভাবে পরিচালনা করে তা সম্পর্কে আরও জানতে: সি ++ এ স্থিতিশীল সদস্য ফাংশনগুলি কি একাধিক অনুবাদ ইউনিটে অনুলিপি করা হয়?
হ্যাঁ আপনি * .cpp ফাইলে স্থির সদস্য ফাংশন সংজ্ঞায়িত করতে পারেন। যদি আপনি এটি শিরোনামে সংজ্ঞায়িত করেন তবে সংকলক ডিফল্টরূপে এটি ইনলাইন হিসাবে বিবেচনা করবে। তবে, এর অর্থ এই নয় যে স্থির সদস্য ফাংশনের পৃথক অনুলিপি কার্যকর করা যায়। এই সম্পর্কে আরও জানতে দয়া করে এই পোস্টটি অনুসরণ করুন: একাধিক অনুবাদ ইউনিটগুলিতে সি ++ এ স্থির সদস্য ফাংশনগুলি কি অনুলিপি করা হয়?
inlineবা templateঅথবা আপনি linker থেকে একাধিক সংজ্ঞা ত্রুটি পাবেন।
আপনার হেডার ফাইলটিতে foo.h বলুন
class Foo{
public:
static void someFunction(params..);
// other stuff
}
আপনার বাস্তবায়ন ফাইলে foo.cpp বলুন
#include "foo.h"
void Foo::someFunction(params..){
// Implementation of someFunction
}
আপনি যখন আপনার প্রয়োগকারী ফাইলে স্থির ফাংশনটি প্রয়োগ করছেন তখন আপনি আপনার পদ্ধতি স্বাক্ষরে স্থির কীওয়ার্ডটি ব্যবহার করবেন না তা নিশ্চিত করুন।
শুভকামনা
@ ক্রোবার, আপনি ঠিক বলেছেন যে মাল্টি-ফাইলের উদাহরণগুলির অভাব রয়েছে, তাই আমি আশা করি নিম্নলিখিতটি ভাগ করে নেওয়ার সিদ্ধান্ত নিয়েছি যে এটি অন্যকে সহায়তা করে:
::::::::::::::
main.cpp
::::::::::::::
#include <iostream>
#include "UseSomething.h"
#include "Something.h"
int main()
{
UseSomething y;
std::cout << y.getValue() << '\n';
}
::::::::::::::
Something.h
::::::::::::::
#ifndef SOMETHING_H_
#define SOMETHING_H_
class Something
{
private:
static int s_value;
public:
static int getValue() { return s_value; } // static member function
};
#endif
::::::::::::::
Something.cpp
::::::::::::::
#include "Something.h"
int Something::s_value = 1; // initializer
::::::::::::::
UseSomething.h
::::::::::::::
#ifndef USESOMETHING_H_
#define USESOMETHING_H_
class UseSomething
{
public:
int getValue();
};
#endif
::::::::::::::
UseSomething.cpp
::::::::::::::
#include "UseSomething.h"
#include "Something.h"
int UseSomething::getValue()
{
return(Something::getValue());
}
অবশ্যই আপনি পারেন। আমি বলব যে আপনার উচিত।
এই নিবন্ধটি কার্যকর হতে পারে:
http://www.learncpp.com/cpp-tutorial/812-static-member-function/
#includeনির্দেশ আক্ষরিক অর্থ হল "এই স্পট যে ফাইলে সমস্ত ডেটা কপি করুন।" সুতরাং আপনি যখন শিরোনাম ফাইলটি অন্তর্ভুক্ত করবেন তখন কোড ফাইলের মধ্যে এটি পাঠ্যগতভাবে থাকে এবং এতে সমস্ত কিছু উপস্থিত থাকে, যখন কোড ফাইল (বর্তমানে সংকলন ইউনিট বা অনুবাদ ইউনিট বলা হয় ) হয় তখন অন্যান্য নির্দেশাবলী বা ম্যাক্রো প্রতিস্থাপনের প্রভাবটি দেয় বা গ্রহণ করে প্রিপ্রোসেসর মডিউল থেকে সংকলক মডিউলে হস্তান্তর।
যার অর্থ আপনার স্থিতিশীল সদস্য ফাংশনটির ঘোষণা এবং সংজ্ঞা সত্যই একই ফাইলটিতে ছিল ...