能解释一下每个错误的空为什么这么改吗?求解,明天要考试了

更正后程序的输出应该是:

 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;
指针调用 采用->
希望对题主有所帮助,望采纳!!