C++派生类构造函数能否向基类传递非自身参数?
C++派生类构造函数向基类传递参数的问题
以下是我编写的C++代码:
class Food { int Kg, Quality; public: Food(int kg, int quality) { Kg = kg; Quality = quality; } ~Food(void) {} }; class Pizza : public Food { public: int Flavor; // 使用未声明的标识符'tempKg' 'tempQuality' [错误] Pizza(int flavor) : Food(tempKg, tempQuality) { // 我想知道能否将这些变量用作Food的实参 int tempKg=0, tempQuality=0; int Flavor = flavor; } // 这段代码可以正常运行 /* Pizza(int flavor, int kg, int quality) : Food(kg, quality) { int Flavor = flavor; } */ };
我的问题是:传递给基类Food构造函数的参数是否只能是派生类Pizza构造函数自身声明的参数?如果并非如此,该如何向基类传递不属于Pizza构造函数参数的数值?
解答
传递给基类构造函数的参数并非只能是派生类构造函数自身声明的参数,但要注意:构造函数的初始化列表是在构造函数体执行前运行的,所以不能用构造函数体内才声明的局部变量(这就是你代码报错的原因——tempKg和tempQuality在初始化列表执行时还没被定义)。
你可以通过以下几种方式传递非派生类构造函数参数的数值:
直接使用字面量或常量
直接把固定值写到初始化列表里,比如:Pizza(int flavor) : Food(0, 0) { Flavor = flavor; }使用类的静态成员变量或全局变量
提前定义好静态成员或全局变量,在初始化列表中引用:class Pizza : public Food { static constexpr int DEFAULT_KG = 0; static constexpr int DEFAULT_QUALITY = 0; public: int Flavor; Pizza(int flavor) : Food(DEFAULT_KG, DEFAULT_QUALITY) { Flavor = flavor; } };调用返回目标类型的函数
可以调用自定义函数、标准库函数等获取需要的数值:// 自定义函数返回默认重量 int getDefaultFoodKg() { return 0; } class Pizza : public Food { public: int Flavor; Pizza(int flavor) : Food(getDefaultFoodKg(), 0) { Flavor = flavor; } };
内容的提问来源于stack exchange,提问作者lapdoggo
相关产品推荐
相关产品推荐

