类中有其他构造函数的时候最好定义默认构造,或则利用default关键字将其变成合成默认构造。
class Phone { public: Phone(std::string name) { name_ = name; } std::string name_; }; class Person { public: Person(std::string name,std::string ph) { cout << "这是一个有参构造" << endl; } ~Person() { } std::string name_; Phone ph_;//编译器会因为Phone没有默认构造而报错 };
1 class Phone 2 { 3 public: 4 Phone(std::string name) 5 { 6 name_ = name; 7 } 8 std::string name_; 9 }; 10 11 class Person 12 { 13 public: 14 //此时编译器会因为初始化列表将Phone ph_;这个语句当成有参构造,而不报错 15 Person(std::string name,std::string ph):name_(name),ph_(ph) 16 { 17 cout << "这是一个有参构造" << endl; 18 } 19 ~Person() 20 { 21 22 } 32 std::string name_; 33 Phone ph_; 34 };