-3

假设我用这个私有变量得到了一个“简单”类:std::vector m_listePoint; 哪个构造函数是

Simple(EnumCouleur::tEnumCouleur c,vector<Point> listeP);

(couleur 继承自她的母亲类)

我有另一个类是“Circle”(“Simple”的子类),有 2 个变量:1 个点,1 个半径这是我尝试过的构造函数:

Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v)
{
        m_rayon = rayon;
        vector<Point> liste;
        liste.push_back(centre);
        __super::Simple(v,liste);

}

我收到一条错误消息,提示 Simple 没有默认构造函数。

我知道基本上我应该这样做:

 Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v) : m_rayon(rayon), Simple(...)

问题是:那么如何构建向量呢?

这可能是一个我不知道的愚蠢问题,我来自 java,这就是为什么我使用 super 并且可能是不好的方式......

4

2 回答 2

0

使用向量构造函数生成n元素副本的向量:

Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v) 
       : m_rayon(rayon), Simple(v, std::vector<Point>(1, centre)) { /* ... */ }

或者,在 C++11 中,使用初始化列表构造函数:

Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v) 
       : m_rayon(rayon), Simple(v, {centre}) { /* ... */ }
于 2014-11-19T22:00:41.603 回答
0

Vector 在这里有一个有用的构造函数:vector(size_type count, const T& value, <irrelevent>)它可以很容易地构造一个带有单个元素的向量:vector<Point>(1, centre)

像这样:

Cercle::Cercle( const Point centre, const double rayon, EnumCouleur::tEnumCouleur v)
    :m_rayon(rayon),
    Simple(v, vector<Point>(1, centre))
{
}

如果您有多个元素,请制作一个更简单的辅助函数或使用initializer_list

初始化器列表

Rect::Rect( const Point topleft, const Point botright, EnumCouleur::tEnumCouleur v)
    :m_rayon(rayon),
    Simple(v, {topleft, botright})
{
}

辅助功能:

std::vector<Point> make_from_two(point one, point two) {
    vector<Point> liste;
    liste.push_back(one);
    liste.push_back(two);
    return liste;
} 

Rect::Rect( const Point topleft, const Point botright, EnumCouleur::tEnumCouleur v)
    :m_rayon(rayon),
    Simple(v, make_from_two(topleft, botright))
{
}
于 2014-11-19T22:00:49.343 回答