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

它是成员初始化列表。它允许传递正确的参数并为类的成员和基类的构造函数选择好的构造函数。

标准说:

12.6.2 初始化基和成员 [class.base.init]

在类的构造函数定义中,直接和虚拟基子对象和非静态数据成员的初始化程序可以由ctor-initializer指定,其形式为

ctor-initializer:
   : mem-initializer-list

未在成员初始化列表中指定的任何成员或基类都将使用其默认构造函数。

在您的情况下,您将传递给初始化nh_的构造函数。image_transport::ImageTransportit_

于 2013-09-02T13:56:59.230 回答
0

它是一个构造函数初始化列表。您可以在此特定情况下阅读有关该主题的更多信息,使用成员初始值设定项列表和在构造函数中分配值有区别吗?

于 2013-09-02T13:57:05.033 回答
0

该列表示初始化列表的开始。它用于设置对象的变量。它的另一个重要且有用的功能是调用此类派生的基于类的所需构造函数。可以在构造函数初始化列表调用所需的基类构造函数中找到将其引入 C++ 的详细答案和原因

于 2013-09-02T17:35:12.477 回答