-3

このプライベートvarを持つクラス「Simple」を取得したとしましょう: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から来ました。これが私がスーパーを使用した理由であり、悪い方法かもしれません...

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 に答える