虚拟函数
#include "stdio.h"
class A{
public:
void print()
{
printf("%s","this is A\n");
}
};
class B:public A{
public:
void print()
{
printf("%s","this is B\n");
}
};
int main()
{
int i=1;
A a;
B b;
a.print(); //输出this is A
b.print(); //输出this is B
A* point_a=&a;
point_a->print();
return 0;
}
上面标成蓝色的两行
如果是:
A* point_a=&a;
的时候输出结果是:
This is A
如果是:
A* point_a=&b;
的时候输出结果是:
This is A
如果是:
B* point_a=&b;
的时候输出结果是:
This is B
如果是:
B* point_a=&a;
这个编译是会报错的
如果都写成虚拟函数
#include "stdio.h"
class A{
public:
virtual void print()
{
printf("%s","this is A\n");
}
};
class B:public A{
public:
virtual void print()
{
printf("%s","this is B\n");
}
};
int main()
{
int i=1;
A a;
B b;
a.print();//输出this is A
b.print();//输出this is B
A* point_a=&a;
point_a->print();
return 0;
}
上面标成蓝色的两行
如果是:
A* point_a=&a;
的时候输出结果是:
This is A
如果是:
A* point_a=&b;
的时候输出结果是:
This is B
如果是:
B* point_a=&b;
的时候输出结果是:
This is B
如果是:
B* point_a=&a;
这个编译是会报错的