2014-11-24 24 views
0

我在C++中開始了一個新的oop課程,對不起我的英語不好。class oop realions cpp

我讀了一些關於泛化(繼承),聚合和關聯的信息。 仍然沒有理解這個例子:

可以說,一個出租車想到汽車的,包含很多子類像發動機與車輪.. 我想「讓出租車」訪問所有子類的字段(或我是這麼認爲,我想,PLZ告訴我,如果有更好的方法)

engine.h:

class Engine{ 

public: 
    Engine(status nstatus, int npower, double nEngineVer) :EngineStatus(nstatus), power(npower), EngineVer(nEngineVer) 
    {}; 
private: 
    status EngineStatus; 
    int power; 
    double EngineVer; 
}; 

Taxi.h:

#include "engine.h" 

class Taxi{ 
public: 
    Taxi(int id, int ,km, const Engine &engine) :id(id),km(km),engine(engine){}; 
    void printMe(){ 
     cout << id << ' ' << km << ' '<< endl; 
    } 
private: 
    Taxi();  //default Ctor is private! we dont want to create broken Taxi e.g no engine 
    int id; 
    int km; 
    Engine engine; 
}; 

可以說,如果我使用printMe我想打印出租車的整個值, 我應該怎麼做(允許訪問引擎值)

tnks所有答案!

+0

不要這樣做。讓'Engine'能夠打印自己並調用該函數。 – molbdnilo 2014-11-24 12:28:15

回答

0

您也可以爲您的Engine-Class實現所謂的「Getters」。那就是當你是一個更有經驗的程序員時,最常用的方法來訪問類的屬性。

事情是這樣的:

class Engine { 

public: 
    Engine(status nstatus, int npower, double nEngineVer) 
    : EngineStatus(nstatus), power(npower), EngineVer(nEngineVer) 
    {} 

    int getPower() const { return power; } 

private: 
    status EngineStatus; 
    int power; 
    double EngineVer; 
}; 


class Taxi { 

public: 
    Taxi(int id, int ,km, const Engine &engine) 
    : id(id), km(km), engine(engine) 
    {} 

    void printMe() 
    { 
    cout << engine.getPower() << endl; 
    } 

private: 
    int id; 
    int km; 
    Engine engine; 
}; 

你可以做剩下的部分我不會做你的功課。 如果您創建了自定義構造函數,則不需要將默認構造函數設置爲private,只是不聲明它。

0

如果你只想打印Engine值,你可以在Engine編寫一個函數來做到這一點:

class Engine { 
    // ... 
    void printMe(){ 
     cout << EngineStatus << ' ' << power << ' ' << 
       EngineVer << endl; 
    } 
    // ... 
}; 

然後只是把它從Taxi

void printMe() { 
    cout << id << ' ' << km << ' '; 
    engine.printMe(); 
} 
+0

好的,tnks 我認爲它可以罰款printMe, 我認爲正確的關係是一輛出租車「有一個」引擎「有一個」輪子。 這是一個聚集權? 所以我可以使用公共somwhere或朋友或? 如果它是複雜的不明白, 仍然tnks – user3876191 2014-11-24 12:36:18

+0

@ user3876191在這種情況下沒有理由使用友誼或公開事物。如果'Taxi'需要從'Engine'訪問個人成員,則可以隨時添加一個getter。 – Barry 2014-11-24 12:37:34

0

最基本的方法是聲明引擎變量爲public而不是私有的。在這種情況下,從出租車實例中,您可以直接訪問例如engine.power