更正后程序的输出应该是:
MyClassB::show()
MyClassB::show()
[程序]
#include
#include
using namespace std;
class MyClassA{ // 基类
public:
MyClassA()
{
strcpy(str,"MyClassA::show()");
}
//ERROR**********found**********
void show()const
{
cout<<str<<endl;
}
private:
char str[100];
};
class MyClassB:public MyClassA{ // 派生类
public:
MyClassB()
{
strcpy(s,"MyClassB::show()");
}
void show()const
{
cout<<s<<endl;
}
private:
char s[100];
};
//ERRORfound
void fun(MyClassA t)
{
t.show();
}
int main()
{
MyClassB tb;
fun(tb);
MyClassA *ta=&tb;
//ERROR**********found**********
ta.show(); // 通过ta调用show()
system("pause");
return 0;
}
正确答案:
第一空:
virtual void show()const;void virtual show()const
第二空:
void fun(MyClassA & t)
第三空:
ta->show();
第一空:
void show()const;改为virtual void show()const;
基类和派生类同时出现void show()const;相同函数,在基类加virtual,是多态的一种体现,具体来说:定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。
第二空:
void fun(MyClassA t)改为void fun(MyClassA & t)
主函数 fun(tb); 传参 传的为tb MyClassB创建出的对象 此处 加&引用
第三空:
ta.show();---->改为ta->show();
MyClassA *ta=&tb;
指针调用 采用->
希望对题主有所帮助,望采纳!!