את הפוסט הזה אני לא מתחיל בהצהרות על חשיבות הנושא. לא מדובר כאן בנושא מרכזי, אבל בכל זאת אפשר ללמוד כאן משהו חדש שיעזור לביסוס הבנת ה- c++.
הערה מקדימה: הנושא רללונטי רק עבור constructors שמקבלים פרמטר יחיד.
אז על מה מדובר....? מתי להשתמש ב-explicit constructor ומה זה עושה?
מיד נראה, אבל זו דווקא הזדמנות להראות תחילה עוד דרך לקריאה ל-Constructor.
בדוגמא הבאה נראה 3 דרכים לקריאה ל-constructor. שתיים מהן כבר הכרנו.
- /*
- * explicit_const.cpp
- *
- * Created on: Mar 17, 2012
- * Author: ronen halevy
- *
- */
- #include <iostream>
- using namespace std;
- class Example {
- private:
- int a;
- public:
- Example(int a):a(a){}
- void show(){cout << "a="<< a << endl;}
- };
- int main(){
- Example ex1(10);
- ex1.show();
- Example ex2 = Example(10);
- ex2.show();
- Example ex3 = 10;
- ex3.show();
- }
שלושת הצורות לקריאה ל-constructor מודגשות בצהוב. את הפורמט שבשורות 19 ו-21 כבר הכרנו בפוסט הראשון על constructors. החידוש הוא בפורמט שבשורה 23. הפורמט הזה מתאים רק ל-constructors עם פרמטר יחיד.
צורת הקריאה האחרונה עשויה להיות מבלבלת, אבל אפשר לחסום אותה. איך?
על ידי סימון ה-constructor כ-explicit. כך נקבל שגיאה בהשמה מהסוג השלישי.
הנה הclass עם סימון ה-explicit:
/*
* explicit_const.cpp
*
* Created on: Mar 17, 2012
* Author: ronen halevy
*
*/
#include <iostream>
using namespace std;
class Example {
private:
int a;
public:
explicit Example(int a):a(a){}
void show(){cout << "a="<< a << endl;}
};
int main(){
Example ex1(10);
ex1.show();
Example ex2 = Example(10);
ex2.show();
Example ex3 = 10; // Here we get error: conversion from ‘int’ to non-scalar type ‘Example’ requested
ex3.show();
}
אין תגובות:
הוסף רשומת תגובה