链式定义的参数顺序

  • 子类构造函数不能构造父类的属性,父类的属性只能在父类构造函数中进行构造
    • 错误写法:
      class Animal{
       public:
      	int age_;
      }
      
      class Dog: public Animal{
       public:
      	Dog(int age): age_(age){} // 这样是错误的
      }
      正确做法:
      class Animal{
       protected:
      	int age_;
       public:
        Animal(int age) : age_(age) {} // 父类构造函数中构造父类属性
      }
      
      class Dog: public Animal{
       public:
      	Dog(int age): Animal(age) {} // 子类构造函数中通过调用父类的构造函数来构造父类属性
      }
 
  • 构造函数初始值列表的顺序需与属性的定义顺序相同 (这个检查不是严格的,这样做可以避免参数之间的初始化如果存在依赖关系时会出现问题。)
    • 错误的
      class Animal{
       private:
      	int age_;  // 先 age
      	string color_; // 再 color
       public:
        Animal(int age, string color) : color_(color), age_(age) {} // 顺序不对,错误
      }
      正确的
      class Animal{
       private:
      	int age_;
      	string color_;
       public:
        Animal(int age, string color) : age_(age), color_(color) {} // age, color 和类的属性定义的顺序相同
      }
你觉得这篇文章怎么样?
YYDS
比心
加油
菜狗
views

Loading Comments...