讓我告訴你我遇到的問題。我正在設計一組控制數字設備的類。該設備可以在兩種操作模式下工作。在第一種模式下,它可以執行一組特定的操作,而在第二種模式下,它可以執行另一組操作(兩者之間可能有一些共同的操作)。我還可以在運行中更改設備的模式,以便在必要時可以在兩種模式之間切換。獨立於該模式,器件使用相同的一組寄存器。C++從具有相同名稱的成員的基類繼承多重繼承
我在考慮用每個模式的一個基類來解決這個問題,所以當我需要第二組操作時需要模式2的第一組操作和對象時,我可以擁有模式1的對象。然後我可以從這兩個基類中派生一個類,這樣我就可以擁有執行所有操作的對象。
我的設計的問題是兩個基類有一些共同的功能和引用相同的寄存器。既然我不能阻止成員的繼承,我會在派生類中重複。我知道我可以選擇使用範圍操作符訪問哪個副本,但我仍然認爲這是一個糟糕的設計。
所以我的問題是:有沒有解決這個問題的地道方式?
如果沒有解決這個問題的正確或簡單的方法,我在考慮設計3層次獨立的類。我會有一些重複的代碼,但這不是一個大問題,對吧?爲了說明下面(簡化的)
代碼:
class mode1
{
protected:
volatile uint8_t& reg1;
volatile uint8_t& reg2;
uint8_t data;
public:
virtual void operation1() final { // do something }
virtual void operation2() final { // do something }
virtual void operation3() final { // do something }
};
class mode2
{
protected:
volatile uint8_t& reg1;
volatile uint8_t& reg2;
uint8_t data;
public:
virtual void operation4() final { // do something }
virtual void operation2() final { // do something }
virtual void operation5() final { // do something }
};
class mode1and2 : public mode1, public mode2
{
public:
void operation6() { // do something }
void operation7() { // do something }
};
注模式1和2具有操作2和在共同所有數據成員。
爲什麼你想要一個執行所有操作的對象? – immibis
你嘗試了什麼? – Raindrop7
看看虛擬繼承。 –