(1)需要分清楚一点,成员函数和virtual函数的调用方法是不一样的
(2)成员函数的调用是通过this将对象的值传递给函数,这里被传输的是对象数据,接收数据的函数是根据对象的类型以及函数名来确定的而virtual则是根据虚函数表来确定的,对象调用函数,如果系统发现是虚函数,那么就会去虚函数表找该函数的存储位置,找到后调用该函数
(3)注意这两之间的区别,普通函数是根据对象定义类型来确定的,而虚函数则是根据对象本身的虚函数表来的,在平常情况下没有太大区别,但是一旦涉及到指针,也就是说父指针的话那么就有了较大区别,因为此时普通函数的确定实际上就变成了根据父类型的类去寻找函数的情况,一旦子类函数有变便会出错
class Point {
public:
~Point() { cout << "调用了Point析构函数" << endl; }
Point() { cout << "调用了Point构造函数" << endl; }
};
/*
class Point {
public:
virtual ~Point() { cout << "调用了Point析构函数" << endl; }
Point() { cout << "调用了Point构造函数" << endl; }
};
*/
class Circle:public Point {
public:
~Circle() { cout << "调用了Circle析构函数" << endl; }
Circle() { cout << "调用了Circle构造函数" << endl; }
};
int main()
{
Point*p = new Circle;
delete p;
system("pause");
}