原程序在末尾。
int main()
{
D d; //D是派生类
B *pb = &d; //B是基类
D *pd = &d;
pb->fl(1.23); //语句 1
pd->fl(1.23); //语句 2
pb->f2(1.23); //语句 3
pb->f3(1.23); //语句 4,此处为啥调用基类????
pd->f3(3.14); //语句 5,此处为啥调用派生类??
system("pause");
return 0;
}
我的问题是,语句4、5的调用问题。
现在脑瓜有很多问号???
本来理解的是,语句4/5调用派生类的函数。因为看到D定义的指针,在B定义的指针后面
而且指针名也相同,应该会覆盖前一个语句吧。但结果。。这是C++实验问答题
就是问,为啥出现这种结果。现在附上代码:
#include< iostream>
using namespace std;
class B {
public:
virtual void fl(double x)
{
cout <<"B::f1(double)"<< x << endl; //单输出x值
}
void f2(double x)
{
cout << "B::f2(double)" << 2 * x << endl; //输出2倍x
}
void f3(double x)
{
cout << "B::f3(double)" << 3 * x << endl; //输出3倍x
}
};
class D :public B { //B的派生类
public:
virtual void fl(double x)
{
cout << "D::f1(double)" << x << endl;
}
void f2(int x)
{
cout << "D::f2(int)" << 2 * x << endl; //强制转换x到int,再2x。这个想法是错的,
} //由于基类存在输入double型,故输入double,会调用基类f2
void f3(double x)
{
cout <<"D::f3(double)"<< 3 * x << endl;
}
};
int main()
{
D d; //D是派生类
B *pb = &d; //B是基类
D *pd = &d;
pb->fl(1.23); //语句 1
pd->fl(1.23); //语句 2
pb->f2(1.23); //语句 3
pb->f3(1.23); //语句 4
pd->f3(3.14); //语句 5
system("pause");
return 0;
}
望大佬,解答解答,谢谢