(1)C++和C一样是静态编译语言
(2)所以在静态编译时会根据指针的类型选择指针调用的对象;所以编译器会认为父指针指向的是父对象
然而在实际的应用中,父指针所指向的可能是子类对象,所以就会产生调用错误的现象
(3)因为程序处于未运行状态,所以程序并不知道此刻该指针指向的是父对象还是子对象,编译器默认为父对象
如果采用的不是指针而是对象,则不会产生上述现象
下列中子类和父类中都含有fun,如果是通过类对于fun进行调用,那么编译器是可通过C的类型调用Circle中的fun的,所以显示的是Circle中的fun函数
#include<iostream>
#include<string>
using namespace std;
class Point {
public:
void fun() { cout << "Point 中的fun函数" << endl; }
void print() { fun(); }
};
class Circle:public Point {
public:
void fun(){ cout << "Circle中的fun函数" << endl; }
};
int main()
{
Circle C;
C.fun();
system("pause");
}
将上述中的对象调用该为指针调用,则显示的Point 中的fun函数
就是因为在编译时将P->print()默认为调用父类中的函数的原因
int main()
{
Circle C;
Point*P = &C;
P->print();
system("pause");
}
C++静态编译如何区别调用的是父类还是子类函数
最新推荐文章于 2022-08-19 08:50:30 发布