簡體   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