1

Essential C++ を読んでいます。セクション 4.3 で、著者はconstの使用法を説明するために例を示します。

class val_class {
public:
    val_class(const BigClass &v)
        : _val(v) {}

    const BigClass& val() const {return _val;}
    BigClass& val() {return _val;}
};

void example(const BigClass *pbc, BigClass &rbc)
{
    pbc->val();
    rbc.val();
}

上記のコード セグメントでは、作成者は constness に基づいて関数 val をオーバーロードしています。そして、pbc->val()const インスタンスrbc.val()を呼び出し、非 const インスタンスを呼び出します。

pbcはBigClass型のconst ポインターです。BigClassにメンバー関数valがあることをどのように保証できますか? サンプル関数でBigClass を val_class置き換える必要がありますか?

4

2 に答える 2

2

これでなければなりません:あなたの完全な例

これは明らかに本のタイプミスです。あなたが自分で考え出したように、example関数は次のようになります

void example(const val_class *pbc, val_class &rbc)
{
    pbc->val();
    rbc.val();
}
于 2012-07-22T04:17:17.250 に答える
0

BigClassから派生できないため、置換する必要がありますval_class(この場合、コードはコンパイルできないため、オブジェクトを格納またはオブジェクトに格納できません。したがって、オブジェクトのみを格納できval_classreference宣言されていない/完全に宣言されていない型のオブジェクトを格納できないため、派生できません)。const-referenceBigClassBigClassBigClassval_class

于 2012-07-22T04:21:12.930 に答える