谁帮我看一下这个程序哪出问题了 变异老有一个错误 我c++菜鸟 忘不吝赐教

#include <iostream.h>
class father
{
public:
father()
{
cout<<"调用父类构造函数"<<endl;
}
void run()const{cout<<"父亲可以跑万米"<<endl;}
};
class son():public father
{
public:
son()
{
cout<<"调用子类的构造函数"<<endl;
}
void run()const{cout<<"儿子可以跑千米"endl;}
};
int main()
{
father *p=new son;
p->run();
delete p;
return 0;
};

#include <iostream.h>
class father
{
public:
father()
{
cout<<"调用父类构造函数"<<endl;
}
void virtual run()const{cout<<"父亲可以跑万米"<<endl;} //用virtual实现多态
};
class son:public father //去()
{
public:
son()
{
cout<<"调用子类的构造函数"<<endl;
}
void run()const{cout<<"儿子可以跑千米"<<endl;} //少<<
}; //中文分号
int main()
{
father *p=new son;
p->run();
delete p;
return 0;
};
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-16
#include <iostream.h>
class father
{
public:
father()
{
cout<<"调用父类构造函数"<<endl;
}
void run()const{cout<<"父亲可以跑万米"<<endl;}
};
class son:public father
{
public:
son()
{
cout<<"调用子类的构造函数"<<endl;
}
void run()const{cout<<"儿子可以跑千米"<<endl;}

};
int main(int argc, char* argv[])
{
father *p=new son;
p->run();
delete p;
return 0;
}
第2个回答  2012-07-16
既然是继承,就要有相关的关键字。
void virtual run()const{cout<<"父亲可以跑万米"<<endl;} //用virtual实现多态
第3个回答  2012-07-16
father类和 son类中的run函数前面都加上virtual关键字,就是这样:
virtual void run()const追问

貌似虚函数只能在基类中被声明吧

追答

这个理解绝对是错误的,虚函数不知在基类中可以声明,你的这个程序中两个run函数都应该加上virtual的,但是因为第二个run编译器会根据前面的father的run是虚函数,判断son里的run是不是也是虚函数(看返回值类型,函数名,参数类型是否完全相同),所以可以不在son类中的run加virtual。

第4个回答  2012-07-16
编译错误,应该是缺少 std的标识,在 #include <iostream.h> 后加上 using namespace std;追问

好像我记得用就不用加using namespece std了 用才要加的啊

相似回答