См. оригинал здесь.
generic type REAL is digits <>; with function F (X: in REAL) return REAL; function G_INTEGRATE (A, B, EPS: in REAL) return REAL;
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() { char * p = "string1"; STRING s2("string2"); STRING s3(p); STRING s(s2,s3); f (s3); f (s); } void Q(){ q(); cout << i; }
try Х G(1); } finally { i := 5; }
1 1 2 2 2 1 3 2 3 1 3 2Единственным допустимым видом преобразования является добавление спецификатора 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(); }