在派生类中调用虚函数

时间:2013-12-03 18:21:49

标签: c++ object

我有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

显示

2 个答案:

答案 0 :(得分:1)

您没有设置cargShip对象的属性。您可以设置sh 对象的名称和日期,但cargShip 对象是一个完全独立的对象,具有您自己尚未设置的名称和日期。尝试:

cargShip.setName("Cargo Ship")
cargShip.setCapacity(1000);

答案 1 :(得分:0)

首先,不清楚如何定义类,是否在派生类的构造函数中初始化基类的数据成员。 此外,我没有看到声明为虚拟的功能显示。