Справочное руководство по C++ - страница 73

Шрифт
Интервал

стр.


> friend int operator!=(string&x, string&y)

>  {return strcmp (x.p-›s, y.p-›s) != 0;}

>};


>string::string()

>{

> p = new srep;

> p-›s = 0;

> p-›n = 1;

>}


>string::string(char* s)

>{

> p = new srep;

> p-›s = new char[strlen(s) +1];

> strcpy(p-›s, s);

> p-›n = 1;

>}

>string::string(string& x)

>{

> x.p-›n++;

> p = x.p;

>}


>string::~string()

>{

> if (--p-›n - 0) {

>  delete p-›s;

>  delete p;

> }

>}


>string& string::operator=(char* s)

>{

> if (p-›n › 1) {

>  p-›n--;

>  p = new srep;

> }

> else if (p-›n == 1)

>  delete p-›s;


> p-›s = new char[strlen(s)+1];

> strcpy(p-›s, s);

> p-›n = 1;

> return *this;

>}


>string& string::operator=(string& x)

>{

> x.p-›n++;

> if (--p-›n == 0) {

>  delete p-›s;

>  delete p;

> }

> p = x.p;

> return *this;

>}


>ostream& operator‹‹(ostream& s, string& x)

>{

> return s ‹‹ x.p-›s ‹‹ " [" ‹‹ x.p-›n ‹‹ "]\n";

>}


>istream& operator››(istream& s, string& x)

>{

> char buf[256];

> s››buf;

> x = buf;

> cout ‹‹ "echo: " ‹‹ x ‹‹ "\n";

> return s;

>}


>void error(char* p)

>{

> cout ‹‹ p ‹‹ "\n";

> exit(1);

>}

>char& string::operator[](int i)

>{

> if (i‹0 || strlen(p-›s)‹i) error("index out of range");

> return p-›s[i];

>}


>main()

>{

> string x[100];

> int n;


> cout ‹‹ "here we go\n";

> for (n = 0; cin››x[n]; n++) {

>  string y;

>  if (n==100) error("too many strings");

>  cout ‹‹ (y = x[n]);

>  if (y=="done") break;

> }

> cout ‹‹ "here we go back again\n";

> for (int i=n-1; 0‹=i; i--) cout ‹‹ x[i];

>}

b7_2_8.cxx

>#include ‹stream.hxx›


>struct employee {

> friend class manager;

> employee* next;

> char* name;

> short department;

> virtual void print();

>};


>struct manager: employee {

> employee* group;

> short level;

> void print();

>};


>void employee::print()

>{

> cout ‹‹ name ‹‹ "\t" ‹‹ department ‹‹ "\n";

>}


>void manager::print()

>{

> employee::print();

> cout ‹‹ "\tlevel " ‹‹ level ‹‹ "\n";

>}


>void f(employee* ll)

>{

> for (; ll; ll=ll-›next) ll-›print();

>}


>main ()

>{

> employee e;

> e.name = "J. Brown";

> e.department = 1234;

> e.next = 0;

> manager m;

> m.name = "J. Smith";

> m.department = 1234;

> m.level = 2;

> m.next = &e;

> f(&m);

>}

b7_7.cxx

>#include ‹stream.hxx›


>struct base { base(); };


>struct derived: base { derived(); };


>base:: base()

>{

> cout ‹‹ "\tbase 1: this=" ‹‹ long(this) ‹‹ "\n";

> if (this == 0) this = (base*)27;

> cout ‹‹ "\tbase 2: this=" ‹‹ long(this) ‹‹ "\n";

>}


>derived::derived()

>{

> cout ‹‹ "\tderived 1: this=" ‹‹ long(this) ‹‹ "\n";

> if (this == 0) this = (derived*)43;

> cout ‹‹ "\tderived 2: this=" ‹‹ long(this) ‹‹ "\n";

>}


>main()

>{

> cout ‹‹ "base b;\n";

> base b;

> cout ‹‹ "new base;\n";

> new base;

> cout ‹‹ "derived d;\n";

> derived d;

> cout ‹‹ "new derived;\n";

> new derived;

> cout ‹‹ "new derived;\n";

> new derived;

> cout ‹‹ "at the end\n";

>}

b8_3_3.cxx

>#include ‹xstream.hxx›


>extern void exit(int);


>void error(char* s, char* s2)

>{

> cerr ‹‹ s ‹‹ " " ‹‹ s2 ‹‹ "\n";

> exit(1);

>}


>main(int argc, char* argv[])

>{

> if (argc != 3) error ("wrong number of arguments",");


> filebuf f1;

> if (f1.open(argv[1],input) == 0)

>  error("cannot open input file",argv[1]);

> istream from(&f1);


> filebuf f2;

> if (f2.open(argv[2],output) == 0)

>  error("cannot open input file",argv[2]);

> ostream to(&f2);


> char ch;

> while (from.get(ch)) to.put(ch);


> if (!from.eof() || to.bad())

>  error("something strange happened",");

>}


стр.

Похожие книги