قالب بندی خروجی
وقتي عددي نمايش داده مي شود صفات زير مورد نظر است:

    • مقدار فضاي مورد نياز براي عدد روي صفحه
    • چپ چين يا راست چين بودن ( اعداد تمايل به راست چين دارند)
    • تعداد ارقام اعشار
    • علامت براي اعداد منفي
    • نماي علمي براي اعداد بزرگ

اين صفات توسط شئ cout و توابع کتابخانهiomanip قابل تنظ‍يم هستند.

در C با استفاده از فرامين فرمت مانند %d در تابع printf() قادر به فرمت بندي خروجي هستيم. در C++ فرمت بندي خروجي به طريق متفاوتي از طريق اضافه کردن دستکاري کننده ها (manipulators) به جريان خروجي انجام مي گيرد.

manipulator تابعي است که مي تواند خصوصيات جريان خروجي را تغيير بدهد. manipulator مي توانند به جريان هاي ورودي يا خروجي اضافه شوند.

مثال.endl خط را تمام مي کند و خط جديد را شروع مي کند.

cout << endl;
cout << "Some Text" << endl << endl; // Two blank lines

تابع به صورت زير هم مي تواند استفاده شود.

endl(cout);

کلاس ostream که براي خروجي استفاده مي شود خود از کلاس ios مشتق شده است که از ios_base گرفته شده است. کلاس اخير توابع عمومي را براي دستکاري کننده ها تعريف مي کند.

کلاس iostream از ostream و istream ارث بري دارد بنابراين مثال هاي cout مي توانند iostream را استفاده کنند.
انواع دستکاري کننده ها

اکثر دستکاري کننده ها در اعلان شده اند اما endl، ends و flush از مي آيند. بعضي يک پارامتر مي گيرند و از مي آيند.

دستکاري کننده هاي کتابخانه :

    • endl - خط را خاتمه داده و flush را صدا مي زند.
    • ends - کاراکتر '\0' (NULL) را در جريان درج مي کند.
    • flush - بافر را بلافاصله به خروجي مي فرستد.

دستکاري کننده هاي کتابخانه که بيشتر آنها در ‌ اعلان شده اند:

    • boolalpha - درج يا استخراج اشياي بولين مانند.
    • noboolalpha - درج يا استخراج اشياي بولين مانند مقادير درست و غلط.

    • fixed - درج مقادير مميزشناور در فرمت ثابت.
    • scientific - درج مقادير مميزشناور در فرمت علمي.

    • internal - وسط چين
    • left - چپ چين
    • right - راست چين

    • dec - درج يا استخراج مقادير صحيح در فرمت دهدهي.
    • hex - درج يا استخراج مقادير صحيح در فرمت هگز.
    • oct - درج يا استخراج مقادير صحيح در فرمت اکتال.

    • showbase - مبناي مقدار را پيشوند آن مي کند.
    • noshowbase - مبناي مقدار را پيشوند نمي کند.
    • showpoint - هميشه نقطه اعشار را هنگام درج مقدار اعشار نمايش مي دهد.
    • noshowpoint - نقطه اعشار را اگر لازم نيست نمايش نمي دهد.
    • showpos - اگر عدد مثبت است علامت بعلاوه (+) را درج مي کند.
    • noshowpos - اگر عدد مثبت است علامت بعلاوه (+) را درج نمي کند.
    • skipws - از روي فاصله ها مي پرد.
    • noskipws - از روي فاصله ها نمي پرد.
    • uppercase - حروف کوچک را با حروف بزرگ جايگزين مي کند. تنها روي خروجي توليد شده مانند اعداد هگز تاثير دارد.
    • nouppercase - حروف کوچک را با حروف بزرگ جايگزين نمي کند.

    اکثر اين دستکاري کننده ها يک بيت در فلگ را تنظيم مي کنند. يک فلگ مقداري است که براي تعيين يک سري از کارها استعمال مي شود. فلگ ها معمولا مقادير صحيح هستند اما اغلب داراي يک نام يا برچسب هستند تا اين مقدار خواناتر باشد.

    تنظيم فلگ مستقيما توسط ()cout.setf قابل انجام است و توسط ()cout.unsetf خنثي مي شود. اين توابع متعلق به کتابخانه هستند.

    تابع setf به دو صورت مي تواند استفاده شود:

    setf( flagvalues);
    setf( flagvalues, maskvalues);
    unsetf( flagvalues);

    مثال. براي قالب بندي خروجي به صورت scientific، uppercase و boolalpha پارامترها براي تنظيم بيت ها به صورت زير ارسال مي شود:

    cout.setf( ios_base::scientific | ios_base::uppercase | ios_base::boolalpha) ;
    cout << hex << endl;
    cout << 1234 << endl;
    cout << dec << endl;
    cout << 123400003744.98765 << endl;
    bool value=true;
    cout << value << endl;
    cout.unsetf( ios_base::boolalpha) ;
    cout << value << endl;

    خروجي به صورت زير توليد مي شود:

    4D2
    1.234000E+011
    true
    1

    هر کاراکتري را مي توان توسط casting به خروجي ارسال کرد. براي مثال Char(27) کاراکتر escape را ارسال مي کند.

    اگر دو ثابت رشته در جوار هم باشند و بين آنها علامتي نباشد کامپايلر دو رشته را بهم مي چسباند.

    مثال.

    #include <iostream>

    int main()
    {
       cout << "This is far too long to put on a "
       "single line but it can be broken up with "
       "no ill effects\nas long as there is no "
       "punctuation separating adjacent character "
       "arrays.\n";
       return 0;
    }


    • unitbuf - بافر را بعد از درج خالي مي کند.
    • nounitbuf - با را بعد از هر درج خالي نمي کند.