0

だから私は2つの参照型メンバーを持つクラスをC ++で作成しました:

class Edge{
private:
const Node& base;
const Node& target;

public:
    Edge(const Node& new1, const Node& new2);

C'tor の base と target にデフォルト値を与えたいです。つまり、次のことを意味します。

Edge()

エラーにはなりませんが、Edge オブジェクトを作成します。それ、どうやったら出来るの?

編集:私もやろうとしています:

Edge::Edge(const Node& newBase, const Node& newTarg)
{
    m_base=newBase;
    m_target=newTarg;
}

しかし、それは私を許しません、それは演算子 "=" がこの演算子に一致しないと言います. しかし、ノードの「=」演算子を作成し、それが機能することを確認しました.......

4

3 に答える 3

5

他のパラメーターと同様にnew1、既定値を指定できます。new2秘訣は、それらは参照によって渡され、(おそらく) 設定するためにそれらを使用しているbaseためtarget、これが意味をなすには十分な長さである必要があるということです。Node指定されていない場所のデフォルトとして使用する静的な「ダミー」を作成することで、これを行うことができます。

class Node {};

class Edge{
private:
static const Node none;
const Node& base;
const Node& target;

public:
    Edge(const Node& new1=none, const Node& new2=none) : base(new1), target(new2) {}
};

const Node Edge::none;

int main() {
  Edge e;
}

それが良いデザインかどうかは別の問題ですが。あなたが解決しようとしている根本的な問題に対して、よりスマートな解決策があるかもしれません。

于 2012-04-30T17:23:09.247 に答える
2

非定数参照でも機能するバージョンを次に示します。

struct Bar { /* ... */ }:

struct Foo
{
    Foo(Bar & br) : b(br)          { }
    Foo()         : b(default_bar) { }
private:
    static Bar default_bar;
    Bar & b;
};
Bar Foo::default_bar;

このように、デフォルトで構築されたすべてのFooインスタンスには、共通の静的default_barオブジェクトへの参照が含まれます。

于 2012-04-30T17:23:52.137 に答える