#37705114 · 22 Aug 2013, 08:54 · · პროფილი · პირადი მიმოწერა · ჩატი
ბევრის პოსტებს გადავავლე თვალი და ბევრი სწავლობს C++ - ს ამიტომ გადავწყვიტე თემა გამეხსნა სადაც გავუზიარებთ ერთმანეთს ახლად მიღებულ ცოდნას C++ ში. მემგონი ცუდი იდეა არუნდა იყოს.
ბოლო რაც ვისწავლე არის class template ები. ამით ჩვენ შეგვიძლია შევქმნათ ჩვენი საკუთარი პატარა container კლასი როგორიცაა vector კლასი:
CODE | #include <iostream> using namespace std;
template <typename T> class array{ private: int lenght; T* ptr; public: array() { lenght = 0; ptr = 0; } ~array() { delete [] ptr; } array(T n) { lenght = n; ptr = new T[n]; //allocate memory } void erase() //delete all element in container { delete [] ptr; lenght = 0; ptr = 0; //0 იმიტომ რომ ptr ფოინთერი აღარ იყოს იმ მეხსიერებაზე //მითითებული რომელიც ცოტახნის წინ გასუფთავდა
} }; int main() { array<int> v(10); //10 int ტიპის ცვლადიანი კონტეინერი return 0; } |
ასევე "functions templates" მაგალითად გვაქვს ფუნქცია
CODE | int max(int a,int b) { return (a > b)? a : b; } |
ვიღახებთ ფუნქციას: max(10,20) ვიღებთ 20 - ს, მაგრამ იქნებ double ების გამოყენება მინდა აქ მჭირდება იგივე ფუნქცია ოღონდ double ტიპის ცვლადით. ბევრი რომ არ ვწეროთ ვწერთ ასე:
CODE | template <typename T> //იდეაში class T ც შეიძლება რომელიც კლასთან არაფერ შეხებაში არაა. T max(T a,T b) { return (a > b)? a : b; } |
რითაც თავიდან ავიცილებთ იგივე ფუნქციის მრავალჯერ დაწერას.
კიდევ რამდენიმეა რაც ბოლოს ვისწავლე და დავწერ იმათსაც მალე.
თქვენც თუ რაიმე გაქვთ დასაწერი დაწერეთ თუ არ გეზარებათ.
გმადლობთ. * * * კიდევ ერთი რაც გამახსენდა. ვთქვათ გვაქვს ერთი კლასის 2 ობიექტი. ორივე ობიექტს აქვს ერთი private ცვლადი - n; შევქმენით ორივე ობიექტი,მივანიჭეთ ერთს 1 და მეორეს 2. და მოგვინდა ამათი შეკრება:
CODE | #include <iostream> using namespace std;
class cent{ private: int n; public: cent(){n = 0;} cent(int s) :n(s) { } }; int main() { cent one(1); cent two(2); cout<< one + two <<endl; return 0; }
|
მოგვცემს შეცდომას იმიტომ რომ კომპაილერმა არ იცის რა უყოს ამას: one + two. ამისათვის უნდა გადავტვირთოთ + ოპერატორი და შედეგად გვექნება ასე:
CODE | #include <iostream> using namespace std;
class cent{ private: int n; public: cent(){n = 0;} cent(int s) :n(s) { } friend int operator+(const cent& a,const cent& b); }; int main() { cent one(1); cent two(2); cout<< one + two <<endl; return 0; } int operator+(const cent& a,const cent& b) { return a.n + b.n; }
|
გამოვიყენე friend ფუნქცია,თუმცა შეიძლებოდა friend ის გარეშე გაკეთება. თქვენი იდეები რა როგორ შეიძლებოდა გაკეთებულიყო. ვიკამათოთ ჯანსაღი კრიტიკით.
This post has been edited by _Buffer on 22 Aug 2013, 09:05
--------------------
გაუქმებულია,PM - ს ნუღა მომწერთ მაინც ვეღარ ვნახავ.
|