我有這個 UML 圖

Ad這是對應的C 代碼
//Parent class Flight
class Flight
{
private:
int callNumber;
Airplane plane;
vector<Passenger> passengers;
public:
//Constructor
Flight();
//Functions
int getCallNum();
void setCallNum();
Airplane getPlane();
//What parameters are taken in these functions.
//I know they are of type Airplane and passenger but are they vectors?
void setPlane(Airplane);
void addPassenger(Passenger);
void removePassenger(Passenger);
};
//Airplane class, child of Flight
class Airplane : public Flight
{
private:
int firstClassSeats;
int economySeats;
public:
//Constructor
Airplane();
//Functions;
int getFirstClassSeats();
int getEconomySeats();
void setFirstClassSeats();
void setEconomySeats();
};
//Passenger class, child of FLight
class Passenger : public Flight
{
private:
string name;
int age;
string address;
public:
//Constructor
Passenger();
//Functions
string getName();
int getAge();
string getAddress();
void setName(string);
void setAge(int);
void setAddress(string);
};
我想知道:
- 當創建父類或基類的物件時,所有類的建構式都會運行嗎?
- 基類可以訪問子類的函式或資料嗎?
- 我不知道父類中的 set plane 函式會是什么樣子。它會以 Airplane 型別的物件作為引數嗎?同樣,父類中的 addpassenger 函式是否會以 Passenger 型別的向量作為引數?
uj5u.com熱心網友回復:
簡而言之
如果 A 繼承了 B(或 A 專門化了 B),那么您應該可以說 A 是(某種)B。如有疑問,更喜歡物件組合而不是繼承。
更多細節
成員函式采用的引數是您為圖中的操作指示的引數。圖中沒有引數導致代碼中沒有引數。
這里的繼承是不明確的。您的圖中沒有繼承。有一些在你的代碼,但它不會賺那么多的意義:是乘客真正飛行?例如,乘客可以飛行,有機組人員等嗎?
如果繼承是合適的,作為 C 的一般規則:在創建物件時總是呼叫物件的建構式。在繼承的情況下,類層次結構的所有建構式都被呼叫,從基建構式開始,直到派生最多的建構式(規則可能更棘手,例如在多重繼承的情況下)。在 UML 中,據我所知,關于建構式的規則并沒有完全指定。
默認情況下,一個類只能訪問另一個類的公共成員。如果一個類是從一個基類派生的(在 UML 中:如果一個類是一個更通用的類的特化),則派生類只能訪問基類的公共成員和受保護成員。盡量避免受保護,因為它是導致討厭錯誤的常見原因。
在 C 中實作 UML 類圖時,存在一個關于屬性和引數型別的棘手問題,因為 C 具有值語意:如果傳遞
Airplaneas 引數,則復制原始飛機物件。如果你有Airplane房產,也一樣。但是,在 UML 中,屬性和關聯具有參考語意(資料型別除外),這意味著飛機引數仍將參考相同的原始飛機。因此,在您的特定情況下,您可能希望將參考或(智能)指標傳遞給Airplane.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337518.html
上一篇:抽象類可以是子類嗎?
下一篇:為什么下面的代碼輸出[<__main__.Bookobjectat0x00000207911F1FD0>]。雖然我希望輸出我添加的書籍串列
