0

関数でこの演算子が C++ で何をするかを誰かに説明してもらえますか?

class simplecanny
{
    ros::NodeHandle nh_;
    ros::NodeHandle n;
    ros::Publisher pub ;
    image_transport::ImageTransport it_;    
    image_transport::Subscriber image_sub_; //image subscriber 
    image_transport::Publisher image_pub_; //image publisher(we subscribe to ardrone image_raw)
    std_msgs::String msg;
    public:
    *** simplecanny()
        : it_(nh_) ***
    {
        image_sub_ = it_.subscribe("/ardrone/image_raw", 1, &simplecanny::imageCb, this);
        image_pub_= it_.advertise("/arcv/Image",1); 
    }

    ~simplecanny()
    {
        cv::destroyWindow(WINDOW);
    }

    ...

コンストラクターではsimplecanny() : it_(nh_)、私はその部分に精通していません: it_(nh_)。それは何をするためのものか?それはオペレーターのオーバーロードのケースですか?

前もって感謝します!

4

6 に答える 6

5

これは、コンストラクター初期化子リストと呼ばれます。これは、基本クラスのコンストラクターとクラスのメンバーに渡されるパラメーターを提供します。

nh_あなたの例では、のコンストラクターに渡していit_ます。

このリストに表示されない基本クラスまたはメンバーは、それぞれの既定のコンストラクターを使用して構築されます。

于 2013-09-02T13:55:49.117 に答える
0

サブクラスの初期化リストでスーパークラス コンストラクターを呼び出します。

于 2013-09-02T13:56:42.547 に答える
0

単一のコロン ( :) は演算子ではなく言語の一部であり、初期化リストの開始を示します。初期化リストはコンストラクターでのみ使用でき、オブジェクトのメンバー変数とスーパークラス サブオブジェクトを初期化するために使用されます。あなたの場合、メンバー変数it_は で初期化されnh_ます。選択したテキストブックで初期化リストとコンストラクターを検索することをお勧めします。

于 2013-09-02T13:56:51.723 に答える
0

member-initialization-listです。正しいパラメーターを渡すことができ、クラスのメンバーと基本クラスのコンストラクターに適切なコンストラクターを選択できます。

標準は次のように述べています。

12.6.2 ベースとメンバーの初期化 [class.base.init]

クラスのコンストラクターの定義では、直接および仮想ベース サブオブジェクトの初期化子と非静的データ メンバーをctor-initializerで指定できます。この形式は次のとおりです。

ctor-initializer:
   : mem-initializer-list

member-initialization-list で指定されていないメンバーまたは基本クラスは、既定のコンストラクターを使用します。

あなたの場合、to initializenh_のコンストラクターに渡しています。image_transport::ImageTransportit_

于 2013-09-02T13:56:59.230 に答える
0

コンストラクタの初期化リストです。詳細については、In this specific case, is there difference between using a member initializer list and assigning values in a constructor? を参照してください。

于 2013-09-02T13:57:05.033 に答える
0

この列は、初期化リストの開始を表します。オブジェクトの変数を設定するために使用されます。もう 1 つの重要で便利な機能は、このクラスが派生するベース クラスの目的のコンストラクターの呼び出しです。詳細な回答とそれが C++ に導入された理由は、コンストラクターの初期化リスト、ベース クラスの目的のコンストラクターの呼び出しで見つけることができます。

于 2013-09-02T17:35:12.477 に答える