فراخوانی سازنده از سازنده دیگر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فراخوانی سازنده از سازنده دیگر

+1 امتیاز

سلام . من در کد زیر سازنده کلاس CP(enumA e) را از سازنده CP(B * b) فراخوانی می کنم ولی اینگار مقداردهی نمیشه و مقادیر چاپ شده اشتباهه. توی vs2012 کامپایل می کنم.

#include <iostream>
using namespace std;

class A;
enum class enumA{m1,m2};
class B{
public:
    B(enumA enum_val):enum_val_(enum_val){}
    enumA enum_val_;
};
class CP{
public:
    CP(enumA e){
        if (e == enumA::m1){
            value1_ = 100;
            value2_ = 200;
        }
        else {
            value1_ = 10;
            value2_ = 20;
        }
    }
    CP(B * b){
        CP(b->enum_val_);
    }
    void print(){
        cout << value1_ << endl << value2_ << endl;
    }
    int value1_;
    int value2_;
};
class A{
public:
    A(B * b):b_(b),cp_(b){};
    CP cp_;
    B *b_;

};
int _tmain(int argc, _TCHAR* argv[])
{
    B *b = new B(enumA::m2);
    A *a = new A(b);
    a->cp_.print();
    return 0;
}
سوال شده فروردین 16, 1393  بوسیله ی Xavi (امتیاز 627)   24 83 110
ویرایش شده فروردین 16, 1393 بوسیله ی Xavi

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام .
توی C++11 ویژگی اضافه شده به نام Delegation ( نماینده ) که میتونید سازنده های دیگر رو به راحتی فراخوانی کنید .
این قسمت از کدتون به این شکل تغییر میکنه :

CP(B * b) : CP(b->enum_val_){
}
پاسخ داده شده فروردین 16, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد فروردین 17, 1393 بوسیله ی BlueBlade
البته متاسفانه  visual studio 2012 از delegating constructor پشتیبانی نمی کنه .
vs چند سال از gcc توی این جور چیزا عقب تره :)
آره . اگه همین بچه ها جمع شیم میتونیم از VS چیز بهتری درست کنیم :)
...