.


:




:

































 

 

 

 


.




, , - . , - , .

, , (, ..) . , , .

, , , - . - .

, , .

, ( , ) . :

// BASE.DIR - class base { public: void fun (int i) { printf("\nbase::i =",i); }};class dir: public base{ public: void fun (int i) { printf("\nbase::i =",i); }};

void fun(int) base dir.

dir fun(), base, , : base::fun(). dir ( ) , dir, fun() .

, base dir, fun () :

// #include <stdio.h>#include base.dir // void main (void){ base B, *bp = &B; dir D, *dp = &D; base *pbd = &D; bp->fun (1); // : base::i = 1 dp->fun (5); // : dir::i = 5 pbd->fun (4); // : base::i = 4}

. pbd. ( D) (base*). , ++. , .. , ( ). base dir bp dp . pbd->fun() . pbd base*, - D dir.

base::fun() dir::fun() pbd->fun()? , . ++, .. ( ) , . , .

void show(). show() :

__::show(),

:

___.show().

. .

( ) (), , . , virtual. , . , , virtual.

00 // 01 #include <stdio.h>02 class base 03 { public:04 virtual void vfun(int i) { printf("\nbase::i =",i); }05 };06 class dir1: public base 07 { public:08 void vfun(int i) { printf("\ndir1::i =",i); }09 };10 class dir2: public base 11 { public:12 void vfun(int i) { printf("\ndir2::i =",i); }13 };14 void main (void)15 {16 base B, *bp = &B;17 dir1 D1, *dp1 = &D1;18 dir2 D2, *dp2 = &D2;19 bp->vfun(1); // : base::i = 120 dp1->vfun(2); // : dir1::i = 221 dp2->vfun(3); // : dir2::i = 322 bp =&D1; bp->vfun(4); // : dir1::i = 423 bp =&D2; bp->vfun(5); // : dir2::i = 524 }

, vfun() bp . , . &D1, &D2, . , , , . .

, - . , ( ) , virtual .

, , . .

, , , . ( virtual ). :

00 // 01 #include <stdio.h>02 class base 03 { public:04 virtual void f1(void){ printf("\nbase::f1"); }05 virtual void f2(void){ printf("\nbase::f2"); }06 virtual void f3(void){ printf("\nbase::f3"); }07 };08 class dir: public base 09 { public: 10 void f1(void){ printf("\ndir::f1"); } // 11 //int f2(void){ printf("\ndir::f2"); } // 12 void f3(int i){printf("\ndir::f3:%d",i);} //13 };14 void main (void)15 {16 base B, *bp = &B; dir D, *dp = &D;17 bp->f1(); // : base::f118 bp->f2(); // : base::f219 bp->f3(); // : base::f320 dp->f1(); // : dir::f121 dp->f2(); // : base::f222 //dp->f3(); // - 23 dp->f3(3); // : dir::f3::324 bp = &D;25 bp->f1(); // : dir::f126 bp->f2(); // : base::f227 bp->f3(); // : base::f328 //bp->f3(3); // - 29 }

, . . , , virtual, . , .. . (friend) .

. , ( ) . :

class base{ public: virtual int f (int j) { return j * j; }};class dir: public base { public: int f (int i){ return base::f (i * 2); } };

, () . , :

virtual _(__) = 0;

= 0 . :

virtual void fpure(void) = 0;

. - . . . . :

class B { protected: virtual void f(int) = 0; void s(int);};class D: public B {... void f(int); };class E: public B {... void s(int); };

B - , D - , f - , s - , E - , s - , f - .

, . , .

. . . . , . , .

*(type*)&x, . .

dynamic_cast<T*>(argptr) // RTTIstatic_cast<T>(arg) //

 





:


: 2016-11-18; !; : 584 |


:

:

- , - .
==> ...

1687 - | 1608 -


© 2015-2024 lektsii.org - -

: 0.016 .