См. оригинал здесь.
generic type ELEM is private; type INDEX is (<>); type VECTOR is array (INDEX) of ELEM; with function «>» (A,B: in ELEM) return BOOLEAN is <>; procedure G_SORT (A: in out VECTOR);
int i = 0; class STRING { char * cp; public : STRING (const char * s){ cp = new char [strlen (s) + 1]; strcpy (cp, s); } STRING (const STRING& s){ cp = new char [strlen (s.cp) + 1]; strcpy (cp, s.cp); } STRING (const STRING& s1,const STRING& s2){ cp = new char [ strlen(s1.cp)+strlen (s2.cp) + 1 ]; strcat (strcpy (cp, s1.cp), s2.cp); } ~STRING () { i++; delete [] cp; } operator char * () { return cp; }; void out () { cout << cp << '\n'; } }; void f(STRING s) { s.out();} void q() { STRING p ("string1"); STRING s("string2","string3"); f (p); f (s); } void Q(){ q(); cout << i; }
try G(1); finally i := 5; end;
1 1 2 2 2 2 3 3 3 3 3 3Единственным допустимым видом преобразования является добавление спецификатора virtual.
class X { public: void g() { cout << 1 << ' '; } void f() { g();} }; class Y: public X { public: void g() { cout << 2 << ' ';} void f() { g(); } }; class Z: public Y { public: void g() { cout << 3 << ' '; } void f() { g(); } }; X x; Y y; Z z; X * px = &x; Y * py = &y; Z * pz = &z; void out(void) { px->f(); px->g(); py->f(); py->g(); cout << '\n'; } void F(void) { out(); px = py; py = pz; out(); px = pz; py = pz; out(); }