c++动态陷阱
程序员文章站
2022-07-13 10:50:46
...
记录以防忘记
class base{
public:
........
};
class derive:public base{
public:
void test();
};
int
main(){
derive child;
base *father = &child;
father->test();//error
}
father->test()会报错。因为对于非virtual函数调用,在编译期就已经确定函数地址了,只要virtual函数调用才会触发动态调用。base类是没有test方法的,所以编译通不过。
class base{
public:
........
};
class derive:public base{
public:
void test();
};
int
main(){
derive child;
base *father = &child;
father->test();//error
}
father->test()会报错。因为对于非virtual函数调用,在编译期就已经确定函数地址了,只要virtual函数调用才会触发动态调用。base类是没有test方法的,所以编译通不过。