我有2节课。基类具有虚拟显示功能和成员变量shipname和date。基类中的display()函数打印出船名。派生类具有display()的覆盖,它还打印出船名和成员变量y。
void Ship::display(){
cout << shipName << endl << manufactureDate < <endl;
}
void CruiseShip::display(){
cout << shipName << maxNoOfPassengers << endl;
}
我有一个循环,从派生类调用基类和对象的对象,但它只输出一个船名而不是两个
当我从派生类I调用display时,船名是空的,但是当我从基础对象调用它时,它返回它的值。
void main(){
Ship sh;
CruiseShip cruShip;
CargoShip cargShip;
sh.setName("Monster");
sh.setDate("11/11/2011");
cruShip.setNoOfPassengers(10);
cargShip.setCapacity(1000);
/*Ship *x[3] = {&sh, &cruShip, &cargShip};
for(int i=0;i<3;++i){
x[i]->display();
}*/
cout<<sh.getName()<<endl;
cout<<cruShip.getName()<<endl;
cout<<cargShip.getName();
system("pause");
}
怪物仅从对象sh
显示答案 0 :(得分:1)
您没有设置cargShip对象的属性。您可以设置sh 对象的名称和日期,但cargShip 对象是一个完全独立的对象,具有您自己尚未设置的名称和日期。尝试:
cargShip.setName("Cargo Ship")
cargShip.setCapacity(1000);
答案 1 :(得分:0)
首先,不清楚如何定义类,是否在派生类的构造函数中初始化基类的数据成员。 此外,我没有看到声明为虚拟的功能显示。