2017-02-04 95 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您可能正在接近这个问题,否则我完全误解了您要做的事。 –