עבור לתוכן

תכנות תבניתי C++

Featured Replies

פורסם

איך שולחים משתנה מסוג template לפונקציה בתכנית הראשית?????

לדוגמא הגדרתי משתנה Vector <int> num איך אני שולחת אותו

פורסם

בידיוק כמו במחלקות -

את רושמת template <class T> לפני הפונ', ומשתמשת בסוג T כמו כל סוג רגיל.

פורסם
  • מחבר

לא הבנתי.

אני נמצאת עכשיו בתכנית הראשית.

יש לי שני מערכים מהסוג Vector <int >num ואני צריכה לשלוח אותם לפוקציה שתמזג בינהם.

אם זה היה מערכים רגילים הייתי קוראת לפונקציה ( mizug(num1,num2 אבל עכשיו איך עושים??????? לא צריך מצביעים וכד'?

:nixweiss:לילה טוב.

פורסם

את צריכה לשלוח את המערכים כרגיל.

פורסם

אולי תצהירי על המערכים הללו מחוץ לכל הפונקציות (עם ה INCLUDE שלפני הפונ' וה MAIN).

ככה המערכים הללו יוגדרו ככלליים שלר שייכים לשום פונ'

אני חייב גם לציין שאני לא ככ מתקדם ב C++ אז קחי את הדברים שלי באופן מוגבל, למרות שאת האופציה הספציפית הזאת ניסיתי.

בהצלחה!

פורסם

vector<int> num1,num2;

doSomeThings(num1);

soSomeThings(num2);

vector<int>num3 = merge(num1,num2);

הקוד הזה יעבוד והוא תקין ב c++ (בהנחה והפונקציות מוגדרות). מה שעשיתי כאן זה לשלוח את הוקטורים (num1,num2) עצמם (כלומר by value), שליחה זו תפעיל את ה copy constructor של מחלקה וקטור וכן ה type (במקרה זה int) בגלל שלשניהם יש/לא צריך (בהתאמה) copy constructor את יכולה לשלוח את המשתנים כמו שכתבתי. בשורה האחרונה אני עושה השמה של ערך מוחזר (וקטור) לתוך ווקטור אחר, כאן מופעל assinment operator של וקטור (שקיים) ו copy constructor של הtype (שכאמר, עבור משץנה פרימיטיבי int לא קיים ואין בו צורך). לכן גם פעולה זו חוקית.

ישנה עוד דרך והיא לשלוח פוינטר, ואז שליחת המשתנים היא by reference. במקרה כזה הטיפול הוא קצת שונה אבל בעקרון מאד דומה.

vector<int>* num1,*num2;

.....

.....

vector<int>* num3 = merge(num1,num2);

ההבדלה יהיה בגישה למתודות של האובייקטים (הוקטורים) ובאיתחולם.

אם קודם כתבת

vector<int> num1(6);

כעת תכתבי

vector<int>* num1 = new vector<int>(6);

אם קודם כתבת

num1.at(i);

כעת תכתבי

num1->at(i)

... טוב, אני מקווה שהרעיון מובן.

מטי.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים