【问题标题】:c++ aggregation, passing parametersc++聚合,传递参数
【发布时间】:2014-03-16 14:58:33
【问题描述】:

我是 C++ 新手,非常感谢您的帮助。

问题是如果我的主函数中有这个,我的第二类 (B) 的构造函数应该是什么样子:

B B1(A(1,2),A(3,4),A(5,6));

所以我有两个班级

class A
{
public:
    A(float x=0, float y=0): _x(x),_y(y)
    {}

    A(const A & o) 
    {
        _x=o._x;
        _y=o._y;
    }

private:
    float _x,_y;
};

还有二等:

class B
{
public:
    B(????)
    {
    }
    ~B()
    {
    }

private:
    A *_pPoint;
};

编辑:

我希望它可以将积分保存到某个东西中,以便我以后可以使用它们。

【问题讨论】:

  • 你怎么看?..发表你的想法。
  • 前导下划线约定可能会导致 C 库实现名称出现问题。最好使用尾随下划线。
  • 原始指针成员A* _pPoint 可能是指向一个动态分配的数组。如图所示,代码没有妥善处理此类复制或禁止复制。可能会出现双重删除和其他令人讨厌的未定义行为;请改用std::vector。
  • B(const A& p1, const A& p2, const A& p3) 应该可以允许上述调用。不过,我可能在这里错过了重点......
  • -1 大概您要询问的构造函数应该复制/移动数组的实际参数。但你不说。也许它应该比较它们,或其他东西。正确的签名取决于它的预期。因信息不足而投反对票。

标签: c++ oop


【解决方案1】:

由于构造函数传递了A类型的参数,它可以是-

B(A p, A q, A r); 

【讨论】:

  • 也可以是B( A const& a1, A const& a2, A const& a3 )。加上许多其他变体。但是这个答案和这个答案中的那个之间的选择取决于它打算做什么。
【解决方案2】:

构造函数的声明可能看起来像

B( const A &, const A &, const A & );

至于它的定义,很难说清楚。例如,pPoint 可以指向为数组或单个元素分配的内存区域。

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2018-07-04
    • 2011-01-03
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多