1、虚函数需要实现才能调用,否则出现错误crashed
class A
{
public:
void function(){printf("Hello World");}
};
class B
{
public:
virtual void function(){printf("Hello World");}
};
int main(int argc, char* argv[])
{
A* p1 = NULL;
p1->function();
B* p2 = NULL;
p2->function();
system("pause");
return 0;
};
P1 能helloword
P2 crashed
2、基类虚函数,子类可以动态调用
class A
{
public:
virtual void foo() { cout << "A::foo() is called" << endl;}
};
class B: public A
{
public:
void foo() { cout << "B::foo() is called" << endl;}
};
int main()
{
A * a = new B();
a->foo();
//testvirtual();
system("pause");
}
结果:B类中的virtual 加不加结果都一样
输出结果:B::foo() is called
3、基类非虚函数,子类虚函数
class A
{
public:
void foo() { cout << "A::foo() is called" << endl;}
};
class B: public A
{
public:
virtual void foo() { cout << "B::foo() is called" << endl;}
};
输出结果:
A::foo() is called
好了,先写这么多,以后在增加