2017-10-15 63 views
0

英語不是我的第一語言。我希望我不會犯很多錯誤。我會盡力讓自己儘可能清楚!使用多態性將派生類的值複製到基類

我有一個基類

class engine 
{ 
private : 
    std::string name; 
    double weight; 

public: 
    engine(); 
    ~engine(); 
    std::string getName() const; 
    int getWeight() const 
}; 

std::string engine::getName() const{ 
return this->name; 
} 

int engine::getWeight() const{ 
return this->weight; 
} 

和派生類

class diesel : public engine 
{ 
private: 
    std::string name; 
    double weight; 

public: 
    diesel(); 
    ~diesel(); 
}; 

diesel::diesel(){ 
this->name = Diesel; 
this->weight = 500.00; 
} 

在我的main.cpp

int main() 
{ 
     diesel diesel_engine; 
     const engine &e = diesel_engine; 
     std::cout<<e.getWeight()<<e.getName()<<std::endl; 
     return 0; 
} 

1 - 我必須建立一個名爲diesel_engine柴油類。將柴油發動機的值通過參考值傳遞給新的發動機。

當我打電話給const engine &e = diesel_engine;時,diesel_engine的值(名稱和重量)應該被複制到新的引擎e。

所以'e'應該有500.00的重量和名稱「Diesel」。

我不明白我該如何使用多態性來做到這一點。

謝謝你閱讀這個問題!

+0

這將是巨大的,將添加類的聲明。 –

+0

好的,我會的!謝謝 –

+0

不太清楚,如果我真的明白;似乎成員變量'name'和'weight'應該有'protected'修飾符,那麼。而不是在派生類中重新聲明。怎麼了?你會得到一個編譯時錯誤,運行時錯誤,你如何檢查'main'結尾處的'engine'的值? – dlatikay

回答

1

讓我們開始與類聲明

class Engine 
{ 
private: 
    float weight_; 
    std::string name_; 
public: 
    Engine(float weight, std::string name) : weight_(weight), name_(name){}; 
    std::string GetName() const { return name_;} 
}; 

class Diesel : public Engine 
{ 
public: 
    Diesel(float weight, std::string name) : Engine(weight, name){} 
}; 

所以我們這裏有什麼是Engine類,這是我們的base class,然後我們從Engine定義我們Diesel classDiesel繼承和傳遞參數給它的基類。

我們使用:

Diesel disel_engine(0.0, "diesel engine"); 
const Engine& eng = disel_engine; 
cout << eng.GetName(); 

eng.GetName()調用打印正確的引擎名稱

Demo Here

+0

非常感謝你回答我的問題!現在我明白如何使用它!再次感謝! –

+1

我建議您獲得一本好的C++書籍,並且完全理解它的工作原理。 –