2017-02-04 119 views
4

我已經定義了超類element。有一些派生類elementtriangle,quadcube。一些element對象是邊界元素。如果element是邊界元素,那麼我必須定義其他數據成員和函數。我可以很容易地得出一個boundary_element類如果element類不是基類。(我的意思是,如果trianglequadcube是分開的類我可以這樣定義boundary_triangleboundary_quad,並且boundary_cube獨立的派生類)。作爲抽象類的基類派生類

所以我的問題是,我必須定義具有爲基本(或者甚至抽象的)類用於定義派生類boundary_quadboundary_triangleboundary_cube一個子類boundary_element

這是在C++中的某種可能嗎?任何人都可以提出任何符合目的的建築嗎?

我可以根據我的邏輯解決我的問題的另一種方法是,定義一個類象下面這樣:

class boundary_element 
{  
    element* m_boundary_elem; 
    //data members needed for quad,triangle and cube 
    public: 
    boundary (element*); 
    //functions for modifying data's of triangle,cube,quad. 

} 

element指針被定義爲另一類的成員變量。如何使用繼承有效地重構此類。 (即功能它作爲一個抽象類,用於獲取boundary_triangleboundary_quadboundary_cube類)

我不知道我的問題是很奇怪,但作爲一個初學者,我真的很困惑如何正確使用繼承。對不起,如果我的標題是誤導。

+0

我想你剛纔不應該爲這個問題使用繼承的。 –

+0

@ChristianHackl,那麼我必須在一個類中定義過多的冗餘數據類型和函數。它會消耗大量內存而效率低下嗎? – hisham

回答

3

C++有多重繼承,所以你可以同時從ElementBoundary派生出來,避免代碼重複。

事情是這樣的:

class Element { 
}; 

class Boundary { 
}; 

class Triangle : public Element { 
}; 

class BoundaryTriangle : public Triangle, public Boundary { 
}; 

. . . 
1

這是在C++中的某種可能嗎?

當然是了。

任何人都可以提出任何服務於此目的的建築嗎?

東西沿着這些路線:

  • 有一個抽象基類和接口

    class AbstractShape { 
        boundary getBoundary() const = 0; 
        void draw(OutputScreen& screen) const = 0; 
    }; 
    
  • 具有特定形狀,實現像

    Triangle : public AbstractShape { 
        // Implement the triangle specifics 
    }; 
    
    Rectangle : public AbstractShape { 
        // Implement the rectangle specifics 
    }; 
    
    Circle : public AbstractShape { 
        // Implement the circle specifics 
    }; 
    
+0

我想你誤解了我的問題。一個形狀可以處於邊界。如果它是邊界,那麼如何定義boundary_triangle,boundary_rectangle和boundary_circle,以這種方式從基礎boundary_element類繼承一些常用數據和函數? – hisham

+0

@ user7491077您可能正在接近這個問題,否則我完全誤解了您要做的事。 –