当我们在写类的时候,有构造函数这么一个东西。
比如这个:
class GNSSSubscriber {
//1)方法
//1.1类外方法
public:
GNSSSubscriber(ros::NodeHandle& nh, std::string topic_name, size_t buff_size);//构造函数
GNSSSubscriber() = default;//构造函数
void ParseData(std::deque<GNSSData>& deque_gnss_data);//方法
//1.2类内方法
private:
void msg_callback(const sensor_msgs::NavSatFixConstPtr& nav_sat_fix_ptr);
//2)属性
private:
ros::NodeHandle nh_;
ros::Subscriber subscriber_;
std::deque<GNSSData> new_gnss_data_;
};
我产生了疑惑:为啥有两个构造函数??
明明已经重写了构造函数:
GNSSSubscriber(ros::NodeHandle& nh, std::string topic_name, size_t buff_size);//构造函数
为啥还要有下面的那个?
因为这样做可以保留默认构造函数。
当没有写default时:
如果传入参数,会调用第一个构造函数。
如果没有传参,会报错。
当写了default时:
如果传入参数,会调用第一个构造函数。
如果没有传参,会调用默认构造函数。
//保留了的 不会报错
#include <iostream>
using namespace std;
class A {
public:
// A user-defined
A(int x){
cout << "This is a parameterized constructor";
}
A() = default;
};
int main(){
A a; //call A()
A x(1); //call A(int x)
cout<<endl;
return 0;
}
//没保留会报错
#include <iostream>
using namespace std;
class A {
public:
// A user-defined
A(int x){
cout << "This is a parameterized constructor";
}
};
int main(){
A a; //call A()
A x(1); //call A(int x)
cout<<endl;
return 0;
}
reference:
c++新特性11 (6) =default