繁体   English   中英

在派生类中调用虚函数

[英]Calling virtual function in derived class

我有2节课。 基类具有虚拟显示功能以及成员变量的名称和日期。 基类中的display()函数将打印出船名。 派生类具有对display()的覆盖,该覆盖还将显示船名和成员变量y。

void Ship::display(){
    cout << shipName << endl << manufactureDate < <endl;
}

void CruiseShip::display(){
    cout << shipName << maxNoOfPassengers << endl;
}

我有一个循环,它调用基类中的对象和派生类中的对象,但是它只输出一个船名而不是两个

当我从派生类调用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

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

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

首先,不清楚是否定义类,是否在派生类的构造函数中初始化基类的数据成员。 我也看不到该函数显示声明为虚拟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM