请帮助理解C ++:运算符

时间:2013-09-02 13:52:05

标签: c++ opencv operators ros

有人可以向我解释一下这个运算符在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_)部分。它有什么作用?这是运算符重载的情况吗?

提前致谢!

6 个答案:

答案 0 :(得分:5)

这称为构造函数初始化列表。它将参数传递给基类的构造函数和类的成员。

在您的示例中,它将nh_传递给it_的构造函数。

未出现在此列表中的任何基类或成员都是使用各自的默认构造函数构建的。

答案 1 :(得分:0)

调用子类'初始化列表中的超类构造函数。

答案 2 :(得分:0)

单冒号(:)不是运算符,而是语言的一部分,表示初始化列表的开始。初始化列表只能在构造函数中使用,并用于初始化对象的成员变量和超类子对象。在您的情况下,成员变量it_初始化为nh_。您可能希望在您选择的texbook中查找初始化列表和构造函数。

答案 3 :(得分:0)

member-initialization-list 。它允许传递正确的参数,并为类的成员和基类的构造函数选择了良好的构造函数。

标准说:

  

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

     

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

ctor-initializer:
   : mem-initializer-list

member-initialization-list 中未指定的任何成员或基类将使用其默认构造函数。

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

答案 4 :(得分:0)

它是一个构造函数初始化列表。您可以在In this specific case, is there a difference between using a member initializer list and assigning values in a constructor?

了解有关此主题的更多信息

答案 5 :(得分:0)

该列表示初始化列表的开头。它用于设置对象的变量。它的另一个重要且有用的特性是调用此类派生的所需基类的构造函数。可以在Constructor initialization listsinvocation of desired constructor of based class找到详细解答及其引入C ++的原因