【问题标题】:Inheritance and STL vector继承和 STL 向量
【发布时间】:2014-11-19 21:54:42
【问题描述】:

假设我用这个私有变量得到了一个“简单”类: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 并且可能是不好的方式......

【问题讨论】:

标签: c++ inherited


【解决方案1】:

使用向量构造函数生成一个元素的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}) { /* ... */ }

【讨论】:

  • 如果你有 2 个值放入向量中,你会怎么做?
  • @Niko 初始化列表方法仍然有效。否则,编写一个辅助函数来构造并返回向量。
【解决方案2】:

Vector 在这里有一个有用的构造函数:vector(size_type count, const T&amp; value, &lt;irrelevent&gt;),这使得构造具有单个元素的向量变得容易:vector&lt;Point&gt;(1, centre)

像这样:

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

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

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))
{
}

【讨论】:

  • 如果你有 2 个值放入向量中,你会怎么做?
猜你喜欢
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
相关资源
最近更新 更多