Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující příklad používá třídu money, což je long typ. setpic Manipulátor připojí k třídě formátovací řetězec "obrázek", který lze použít přetíženým operátorem vložení datového proudu třídy money. Řetězec obrázku je uložen jako statická proměnná ve money třídě, nikoli jako datový člen třídy streamu, takže nemusíte odvodit novou třídu výstupního streamu.
Příklad
// one_arg_output.cpp
// compile with: /GR /EHsc
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
typedef char* charp;
class money
{
private:
long value;
static char *szCurrentPic;
public:
money( long val ) { value = val; }
friend ostream& operator << ( ostream& os, money m ) {
// A more complete function would merge the picture
// with the value rather than simply appending it
os << m.value << '[' << money::szCurrentPic << ']';
return os;
}
static void setpic( char* szPic ) {
money::szCurrentPic = new char[strlen( szPic ) + 1];
strcpy_s( money::szCurrentPic, strlen( szPic ) + 1, szPic );
}
};
char *money::szCurrentPic; // Static pointer to picture
void fb( ios_base& os, char * somename )
{
money::setpic(somename);
/*
ostream *pos = dynamic_cast<ostream*>(&os);
if (pos)
{
for( int i=0; i < l; i++ )
(*pos) << ' ';
}
*/
}
_Smanip<charp>
__cdecl setpic(char * somename)
{
return (_Smanip<charp>(&fb, somename));
}
int main( )
{
money amt = (long)35235.22;
cout << setiosflags( ios::fixed );
cout << setpic( "###,###,###.##" ) << "amount = " << amt << endl;
}