C++的继承与多态demo
继承(无虚函数):
-
#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");
-
}