继承(非virtual方式继承):
-
#include <iostream>
-
-
class A
-
{
-
public:
-
void fun ( ) { std:: cout << "A::fun()" << std:: endl; }
-
};
-
-
class B: public A
-
{
-
public:
-
void fun ( ) { std:: cout << "B::fun()" << std:: endl; }
-
void fun2 ( ) { std:: cout << "B::fun2()" << std:: endl; }
-
};
-
-
void main ( void )
-
{
-
A a;
-
a. fun ( ); // A::fun()
-
-
B b;
-
b. fun ( ); // B::fun()
-
b. fun2 ( ); // B::fun2()
-
-
A* rA = &b;
-
rA->fun ( ); // A::fun()
-
std:: cout << &b << " " << rA << std:: endl;
-
-
B* rB = static_cast<B*> (&a );
-
rB->fun ( ); // B::fun()
-
rB->fun2 ( ); // B::fun2()
-
std:: cout << &a << " " << rB << std:: endl;
-
-
system ( "pause" );
-
}
多态:
-
#include <iostream>
-
-
class A
-
{
-
public:
-
virtual void fun ( void ) { std:: cout << "A::fun()" << std:: endl; }
-
};
-
-
class B: public A
-
{
-
public:
-
void fun ( void ) { std:: cout << "B::fun()" << std:: endl; }
-
void fun2 ( void ) { std:: cout << "B::fun2()" << std:: endl; }
-
};
-
-
void main ( void )
-
{
-
A a;
-
a. fun ( ); // A::fun()
-
-
B b;
-
b. fun ( ); // B::fun()
-
b. fun2 ( ); // B::fun2()
-
-
A* rA = &b;
-
rA->fun ( ); // B::fun()
-
-
B* rB = static_cast<B*> (&a );
-
rB->fun ( ); // A::fun()
-
rB->fun2 ( ); // B::fun2()
-
-
system ( "pause" );
-
}