预构造函数初始化
Pre-constructor initialization
我的问题是这样的,我有一个名为"Product"的类和另一个名为"Agriculture"的类,"Agriculture"类继承了"Product"类。
当我召唤"农业"构造函数时,显然首先召唤"产品"构造函数。
问题是,我可以先通过 set 方法初始化产品的一个成员吗?
如果您有:
class Product { ... };
class Agriculture : public Product { ...};
您无法转义在派生对象之前构造基对象的标准规则。 您没有机会按此顺序进行干预,也没有机会在构造函数启动之前Product
设置任何内容。
建议:
满足您需求的最佳设计是预见一个Product
构造函数,该构造函数将要设置的值作为附加参数:
class Product {
string origin;
public:
Product () : origin("tbd") { }
Product (string withorigin) { ...}
void setOrigin (string myorigin) { origin=myorigin; }
};
class Agriculture : public Product {
public:
Agriculture () : Product ("Earth") { ...}
};
解决方法:
如果这样的设计不符合您的需求,您唯一能想象的就是在Product
中有一个静态成员。 这个成员将独立于任何Product
,因此可以在构造对象之前设置。
class Product {
static string defaultCurrency;
string currency;
public:
Product () : currency(defaultCurrency) { ... }
static void setDefaultCurrency (string cur) { defaultCurrency=cur; }
};
class Agriculture : public Product { ... };
int main() {
Product::setDefaultCurrency("EUR");
Agriculture a1;
}
它更容易出错:构造结果取决于与构造无关的操作顺序。 例如,在多线程的情况下,如果多个线程同时构造对象,这可能是一个问题。
首先调用产品构造函数,并在此构造函数中设置一些值。那么,为什么仍然要先通过 set 方法初始化产品的一个成员呢?
相关文章:
- 为什么std::vector和std::valarray初始化构造函数不同
- 初始化构造函数C++中结构的向量
- C++ 中常量属性的初始化构造函数错误
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- 如何通过参数初始化构造函数中的数组?
- 是否有理由使用 malloc 初始化构造函数中的指针
- 如何在 c++ 中初始化构造函数中的二维数组
- 为什么初始化构造函数列表参数时会发生异常?
- 无法初始化构造函数
- 初始化构造函数的默认参数的优选方法是什么?
- 在C++17中使用空列表初始化构造函数时发生编译错误
- C++ 初始化构造函数初始化列表中的嵌套结构?
- 初始化构造函数c++中的向量
- g++ (GCC) 4.6.0 我有以下类,我正在尝试初始化构造函数的结构成员初始化列表
- 使用字符串文本初始化构造函数中的 std::array<char,x> 成员。海湾合作委员会错误?
- 初始化构造函数C++中函数的成员指针
- 在c++中初始化构造函数中的静态成员变量时出错
- memset()初始化构造函数中的对象
- 初始化构造函数C++中的成员向量