这是程序
#include <iostream.h>
class B //基类
{
protected:
int x,y;
public:
B(int a=10,int b=20):x(a),y(b){ }
void calc() //基类有calc()
{
cout <<"x+y=" <<x+y <<endl;
}
};
class D: public B //公有派生类
{
protected:
int z;
public:
D(int a=1,int b=2,int c=3):B(a,b),z(c){}
void calc( ) //派生类也有calc()
{ cout <<"z+x+y=" <<z+x+y <<endl; }
};
void fn(B &t) //形参为基类的引用
{
t.calc(); //只调用基类的calc(),不会调用派生类的calc()
}
int main()
{
B Bo, *pb;
D Do;
cout<<"call Bo.calc():";
Bo.calc();
cout<<"call Do.calc():";
Do.calc();
cout<<"call Bo.calc():";
fn(Bo);
cout<<"call Do.calc():";
fn(Do);
pb=&Bo; //基类对象的指针指向基类对象
pb->calc();
pb=&Do; //基类对象的指针指向派生类对象
pb->calc();
return 0;
}
[1]请问为什么pb=&Do; pb->calc(); 他调用的函数仍然是基类的呢
[2]如果希望fn(Do);和第2条pb->calc();语句调用的是派生类的calc()函数,应该怎样修改程序?
[3]我突发奇想 把void fn(B &t) 函数 形参改为void fn(D &t) 结果发生错误 请问这是为什么呢
慕无忌1623718
相关分类